UnboundLocalError: локальная переменная 'url_request', на которую ссылаются перед присваиванием

Подумай, я здесь схожу с ума.

url_request = 0 def somefunction(): url_request+=1 if __name__ =='__main__': somefunction() 

Дает мне UnboundLocalError. Какую важную концепцию мне не хватает?

  • Google App Engine - как расширить db.IntegerProperty
  • на месте сортировка возвращает Нет для пустого списка
  • Получить вчерашнюю дату в Python, DST-safe
  • Python hashable dicts
  • Трубопроводы и степеды
  • производительность python, работающая с двоичными файлами
  • Один лайнер, чтобы определить, являются ли значения словаря пустыми списками или нет
  • Использование xlsxwriter в Google App Engine для Python
  • Динамическая инстанция Python из имени строки класса в динамически импортированном модуле
  • «Непоследовательное использование вкладок и пробелов в отступе»
  • Рекомендации: как вы указываете требуемые зависимости в файле setup.py?
  • расширенный евклидовой алгоритм и понятие мультипликативного обратного
  • 2 Solutions collect form web for “UnboundLocalError: локальная переменная 'url_request', на которую ссылаются перед присваиванием”

    Вы назначаете глобальную переменную, что означает, что вам нужно отметить ее как глобальную:

     def somefunction(): global url_request url_request+=1 

    Когда вы назначаете переменную в локальной области, она считается локальной переменной, если вы не используете global оператор, чтобы сначала сказать python.

    Для Python 2.7 мы имеем типы переменных: глобальные, локальные. Каждая функция создает собственную локальную область для переменных.

    Из локальной области вы можете читать без каких-либо ограничений. Вы также можете вызвать глобальные методы объекта, чтобы вы могли изменять переменную из глобальной. Но вы не можете переназначить значение.

    Посмотрите на этот код:

     requests = [1,2,3] def modify(): requests.append(4) def redeclare(): requests = [10,20,30] modify() print requests # will give you [1,2,3,4] redeclare() print requests # will give you [1,2,3,4] 

    Что происходит? Вы не можете переназначить переменную requests из локальной области, поэтому интерпретатор создаст для вас другую переменную – в локальной области контекста вызова redeclare .

    Что касается вашего кода … Во-первых, вы пытаетесь переназначить переменную из глобальной области. Зачем? url_request is int , int является неизменным, поэтому операция url_request+=1 не изменяет значение, оно должно переназначить новое значение для имени переменной. Во-вторых, вы не указываете global идентификацию для этой переменной. Поэтому только один вариант для интерпретатора – считать url_request качестве локальной переменной. Но … Вы нигде не заявляли о своей ценности.

    UnboundLocalError означает, что вы пытаетесь выполнить операции с переменным значением, не объявляя его раньше. Надеюсь, это поможет вам больше узнать о переменных / именах / областях Python.

    Python - лучший язык программирования в мире.