2012-01-27 54 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與任何函數的作用相同。它可能會稍微低效一些,因爲它需要完整的列表掃描,而不是一旦發現真實就爆發。

相關問題