Python NameError: глобальное имя 'any' не определено - PullRequest
4 голосов
/ 27 января 2012

Я получаю следующую ошибку на моем производственном сервере:

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 ]

10 голосов
/ 27 января 2012

На самом деле вы работаете на Python 2.4, в котором нет встроенной any.

Если вам нужно определить свой собственный any, это просто:

try:
    any
except NameError:
    def any(s):
        for v in s:
            if v:
                return True
        return False
0 голосов
/ 19 апреля 2016

Я также получил эту ошибку Python с этой строкой:

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

Вот обходной путь без переопределения функции any:

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

Подсчет количества истинных значений и последующее утверждение, что оно больше 0, делает то же самое, что и любая функция. Это может быть немного менее эффективно, поскольку требует полного сканирования списка, а не прерывания, как только обнаруживается True.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...