2012-01-27 46 views
4

我得到我的生产服务器上的以下错误:的Python NameError:全局名称“任意”没有定义

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功能来解决这个问题呢?

+7

从堆栈跟踪中,您的服务器似乎正在运行Python 2.4,它没有'任何'。 – 2012-01-27 17:59:23

+0

oops。哦耶。任何建议如何重写代码与python2.4兼容? – 2012-01-27 18:14:16

+0

@Ned似乎已经给出了很好的答案。尽管我会尽可能考虑升级。下一个版本的Django(1.4)不支持Python 2.4。 – 2012-01-27 19:19:24

回答

10

你实际上在Python 2.4上运行,它没有内置的any

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

try: 
    any 
except NameError: 
    def any(s): 
     for v in s: 
      if v: 
       return True 
     return False 
0

我得到这个Python的错误,以及与这条线:

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

这里是围绕工作,而重新定义any功能:

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

计算Trues的数量然后声明它大于0与任何函数的作用相同。它可能会稍微低效一些,因为它需要完整的列表扫描,而不是一旦发现真实就爆发。

相关问题