Question

I am getting the following error on my production server:

Traceback (most recent call last):

 File "/usr/lib/python2.4/site-packages/django/core/handlers/base.py", line 89, in get_response
response = middleware_method(request)
 File "myproject/middleware.py", line 31, in process_request
if not any(m.match(path) for m in EXEMPT_URLS):

NameError: global name 'any' is not defined

The server is running python 2.6 and in development this error was not raised. The offending code is in middleware.py:

...
if not request.user.is_authenticated():
        path = request.path_info.lstrip('/')
        if not any(m.match(path) for m in EXEMPT_URLS):
            return HttpResponseRedirect(settings.LOGIN_URL)

Should I rewrite this any function to work around the problem?

Was it helpful?

Solution

You are actually running on Python 2.4, which doesn't have an any builtin.

If you need to define your own any, it's easy:

try:
    any
except NameError:
    def any(s):
        for v in s:
            if v:
                return True
        return False

OTHER TIPS

I got this Python error as well with this line:

>>> any([False, True, False])
Error:'any' is not defined

Here's a work around without redefining the any function:

>>> [False, True, False].count(True) > 0
True

Counting the number of Trues and then asserting it is greater than 0 does the same thing as the any function. It might be slightly less efficient since it requires a full list scan rather than breaking out as soon as a True is found.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top