Рубрики
Без рубрики

Как разрешить USINGLOCALERROR на локальной переменную при переназначении после первого использования?

Резюме: Чтобы разрешить UnvityLocalError, когда локальная переменная переназначена после первого использования, вы можете использовать глобальное ключевое слово или нелокальное ключевое слово. Глобальное ключевое слово позволяет изменять значения глобальной переменной из локальной области функции, пока нелокальное ключевое слово предоставляет аналогичные функции в случае … Как разрешить UNICKLOCALERROR на локальной переменной при переназначении после первого использования? Подробнее “

Автор оригинала: 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, in 
    func()
  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

Глобальное ключевое слово против нелокального ключевого слова

Прежде чем заключать эту статью, давайте посмотрим на ключевые различия между глобальный и нелокальный Переменная/ключевые слова.

  1. В отличие от глобальный ключевое слово, нелокальный Ключевое слово работает только в Python 3 и выше Отказ
  2. глобальный Ключевое слово может использоваться с ранее существующими глобальными переменными или новыми переменными, тогда как нелокальный Ключевое слово должно быть определено с ранее существующей переменной.

Заключение

Из вышеупомянутой дискуссии мы узнали, что иметь дело с UnsoundLocalError В нашем коде мы можем использовать один из следующих методов:

  1. Используйте глобальный ключевое слово.
  2. Используйте нелокальный Ключевое слово в случае вложенных функций.
  3. Используйте сметный объект.
  4. Пройти параметры к функции.

Я надеюсь, что вы нашли эту статью полезную и после прочтения, вы можете иметь дело с 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/”