我在生产服务器上收到以下错误:
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
函数来解决这个问题吗?
答案 0 :(得分:10)
你实际上在Python 2.4上运行,它没有any
内置。
如果您需要定义自己的any
,则很容易:
try:
any
except NameError:
def any(s):
for v in s:
if v:
return True
return False
答案 1 :(得分:0)
我在这行中也遇到了这个Python错误:
>>> any([False, True, False])
Error:'any' is not defined
以下是未经重新定义any
功能的解决方法:
>>> [False, True, False].count(True) > 0
True
计算真实数量然后断言它大于0与任何函数相同。它可能效率稍低,因为它需要完整的列表扫描,而不是在找到True后立即爆发。