Python NameError: global name 'any' is not defined
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?
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