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?

Était-ce utile?

La 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

Autres conseils

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top