Python NameError:未定义全局名称“any”

时间:2012-01-27 17:57:20

标签: python 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 个答案:

答案 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后立即爆发。