5

我在生产服务器上收到以下错误:

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函数来解决这个问题吗?

4

2 回答 2

11

您实际上是在没有any内置函数的 Python 2.4 上运行的。

如果您需要定义自己的any,这很容易:

try:
    any
except NameError:
    def any(s):
        for v in s:
            if v:
                return True
        return False
于 2012-01-27T18:09:59.187 回答
2

我在这一行中也遇到了这个 Python 错误:

>>> any([False, True, False])
Error:'any' is not defined

这是一个不重新定义any函数的解决方法:

>>> [False, True, False].count(True) > 0
True

计算 True 的数量然后断言它大于 0 与 any 函数做同样的事情。它的效率可能略低,因为它需要完整的列表扫描,而不是在找到 True 后立即中断。

于 2016-04-19T14:34:33.967 回答