Python NameError:全局名称 'any' 未定义
我在我的生产服务器上遇到了以下错误:
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
服务器上运行的是python 2.6,而在开发环境中并没有出现这个错误。出问题的代码在 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)
我应该重写这个 any
函数来解决这个问题吗?
2 个回答
3
我在这一行代码中也遇到了这个Python错误:
>>> any([False, True, False])
Error:'any' is not defined
这里有一个解决方法,不需要重新定义 any
函数:
>>> [False, True, False].count(True) > 0
True
计算True的数量,然后判断这个数量是否大于0,实际上和any函数的效果是一样的。不过,这种方法可能稍微慢一点,因为它需要检查完整个列表,而不是一找到True就停止。
11
你实际上是在使用Python 2.4版本,这个版本里没有内置的any
函数。
如果你需要自己定义一个any
函数,其实很简单:
try:
any
except NameError:
def any(s):
for v in s:
if v:
return True
return False