Python NameError:全局名称 'any' 未定义

5 投票
2 回答
11426 浏览
提问于 2025-04-17 11:14

我在我的生产服务器上遇到了以下错误:

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

撰写回答