Автор оригинала: Shubham Sayon.
Резюме: Разрешить UnsoundLocalError
Когда локальная переменная переназначена после первого использования, вы можете либо использовать Глобальный
ключевое слово или нелокальный
ключевое слово. Глобальный
Ключевое слово позволяет изменять значения глобальной переменной из локальной области функции, пока нелокальный
Ключевое слово обеспечивает аналогичную функциональность в случае вложенных функций.
Проблема: Учитывая локальную переменную. Как разрешить UnsoundLocalError
Когда локальная переменная переназначена после первого использования?
Пример:
val = 100 def func(): val = val + 100 print(val) func()
Выход:
Traceback (most recent call last): File "C:/Users/Shubham-PC/PycharmProjects/pythonProject1/main.py", line 9, infunc() File "C:/Users/Shubham-PC/PycharmProjects/pythonProject1/main.py", line 5, in func val = val + 100 UnboundLocalError: local variable 'val' referenced before assignment
Прежде чем мы имеем дело с решениями нашей проблемы, мы должны понимать корневую причину UnsoundLocalError
Отказ
Корневая причина разблокировки:
Когда Переменная назначается в функции, он рассматривается как локальная переменная По умолчанию в Python. Если местный Переменная ссылается до того, как значение было назначено/связано с ним, UnsoundLocalError
Поднялся. В приведенном выше примере при переменной 'val'
Читается переводчиком Python внутри Func ()
Функция, это предполагает, что 'val'
это локальная переменная. Тем не менее, он вскоре понимает, что локальная переменная ссылалась до того, как любое значение было назначено на него в рамках функции. Таким образом, это бросает UnsoundLocalError
Отказ
Другими словами, мы можем получить доступ только к глобальной переменной внутри функции, но не может изменять его из функции (если вы не заставляете глобальное или нелокальное задание, используя Global
или нелокальный
Ключевые слова ).
Примечание: Родительский класс всех Python Исключения это Baseexception.
. Следующая диаграмма представляет исключение Иерархия UnsoundLocalError
Отказ
Теперь, когда мы знаем, почему и когда UnsoundLocalError
Поднят, давайте посмотрим на вероятные решения для преодоления этой ошибки.
Метод 1: Использование глобального ключевого слова
Мы можем использовать глобальный
Ключевое слово для доступа и изменение глобальной переменной от локальной Область функции. Любая переменная, созданная вне функции, является глобальным по умолчанию, в то время как любая переменная, созданная внутри функции, является локальной по умолчанию. Таким образом, чтобы изменить глобальную переменную из функции и избежать UnsoundLocalError.
Мы можем использовать глобальный
ключевое слово.
Давайте посмотрим на следующий код, который упрощает вышеуказанную концепцию:
val = 100 print("Value at First Usage: ", val) def func(): global val val = val + 100 print("Output after Modification within func(): ", val) func()
Выход:
Value at First Usage: 100 Output after Modification within func(): 200
Способ 2: Использование нелокального ключевого слова
нелокальный
ключевое слово . используется, когда у нас есть вложенная функция. В такой ситуации локальный объем переменной может не быть определен, то есть объем переменной не является ни локальным, ни глобальным.
Давайте посмотрим на следующий пример, чтобы понять использование нелокальный
Ключевое слово для справиться с нашей проблемой.
def func(): val = 50 print("Output of func:", val) def foo(): nonlocal val val = val + 100 print("Output of foo:", val) foo() print("Output of func() after changes made to foo():", val) func()
Выход
Output of func: 50 Output of foo: 150 Output of func() after changes made to foo(): 150
В вышеуказанной программе нелокальный
Ключевое слово используется с переменной валь
Внутри вложенной функции foo ()
создать нелокальную переменную. Если значение нелокальный
Переменные изменения, изменения отражены в локальной переменной.
Отказ от ответственности: нелокальный
Ключевое слово работает только в Python 3 и выше Отказ
Способ 3: Использование смешанного объекта
С нелокальный
не работает в Версии Python перед Python 3, вы можете использовать мультипликацию объект Как Python Словарь , чтобы сохранить значения, если вы не хотите создавать глобальную переменную.
Давайте посмотрим на следующую программу, чтобы понять использование смешанного объекта, чтобы преодолеть UnsoundLocalError
Отказ
variables = { # creating a mutable object/dictionary 'val': 100 } print('Output before Modification of val: ', variables['val']) def func(): variables['val'] += 50 print('Output after Modification of val: ', variables['val']) func()
Output before Modification of val: 100 Output after Modification of val: 150
Метод 4: Передача параметров к функции
Это традиционный способ решения нашей проблемы. Вместо того, чтобы использовать глобальную переменную, мы можем пройти Параметры к определенной функции, чтобы избежать UnsoundLocalError
Отказ Давайте посмотрим на следующий код, чтобы увидеть, как это можно сделать:
val = 100 print("Value of val at first use: ", val) def func(v): v = v + 100 print("Output of val after modification:", v) func(val)
Выход:
Value of val at first use: 100 Output of val after modification: 200
Глобальное ключевое слово против нелокального ключевого слова
Прежде чем заключать эту статью, давайте посмотрим на ключевые различия между глобальный
и нелокальный
Переменная/ключевые слова.
- В отличие от
глобальный
ключевое слово,нелокальный
Ключевое слово работает только в Python 3 и выше Отказ -
глобальный
Ключевое слово может использоваться с ранее существующими глобальными переменными или новыми переменными, тогда какнелокальный
Ключевое слово должно быть определено с ранее существующей переменной.
Заключение
Из вышеупомянутой дискуссии мы узнали, что иметь дело с UnsoundLocalError
В нашем коде мы можем использовать один из следующих методов:
- Используйте
глобальный
ключевое слово. - Используйте
нелокальный
Ключевое слово в случае вложенных функций. - Используйте сметный объект.
- Пройти параметры к функции.
Я надеюсь, что вы нашли эту статью полезную и после прочтения, вы можете иметь дело с UnsoundLocalError
легко. Пожалуйста, Оставайтесь настроиться Для более интересных статей.
Куда пойти отсюда?
Достаточно теории, давайте познакомимся!
Чтобы стать успешным в кодировке, вам нужно выйти туда и решать реальные проблемы для реальных людей. Вот как вы можете легко стать шестифункциональным тренером. И вот как вы польские навыки, которые вам действительно нужны на практике. В конце концов, что такое использование теории обучения, что никто никогда не нуждается?
Практические проекты – это то, как вы обостряете вашу пилу в кодировке!
Вы хотите стать мастером кода, сосредоточившись на практических кодовых проектах, которые фактически зарабатывают вам деньги и решают проблемы для людей?
Затем станьте питоном независимым разработчиком! Это лучший способ приближения к задаче улучшения ваших навыков Python – даже если вы являетесь полным новичком.
Присоединяйтесь к моему бесплатным вебинаре «Как создать свой навык высокого дохода Python» и посмотреть, как я вырос на моем кодированном бизнесе в Интернете и как вы можете, слишком от комфорта вашего собственного дома.
Присоединяйтесь к свободному вебинару сейчас!
Я профессиональный Python Blogger и Content Creator. Я опубликовал многочисленные статьи и создал курсы в течение определенного периода времени. В настоящее время я работаю полный рабочий день, и у меня есть опыт в областях, таких как Python, AWS, DevOps и Networking.
Вы можете связаться со мной @:
Оригинал: “https://blog.finxter.com/how-to-resolve-unboundlocalerror-on-local-variable-when-reassigned-after-the-first-use/”