- Что означает ошибка UnboundLocalError: local variable referenced before assignment
- Что делать с ошибкой UnboundLocalError: local variable referenced before assignment
- [Решение] Как избежать ошибки UnboundLocalError
- Введение
- Используйте ключевое слово global
- Передайте значение переменной как параметр
- Используйте классы и методы
- Заключение
Что означает ошибка UnboundLocalError: local variable referenced before assignment
Ситуация: вы пишете простую программу на Python, которая что-то считает по заданному алгоритму. Сначала всё идёт как обычно: объявляется глобальная переменная x, потом делаем новую функцию и обращаемся внутри неё к этой переменной:
x = 10
def sum():
x = x + 5
print(x)
Но при запуске этой функции командой sum() компьютер выдаёт ошибку:
Traceback (most recent call last):
File «main.py», line 6, in
sum()
File «main.py», line 3, in sum
x = x + 5
❌ UnboundLocalError: local variable ‘x’ referenced before assignment
Что это значит: Python ожидает, что x внутри функции будет локальной переменной. Соответственно, он ищет, где она объявляется в функции. А она не объявлена. Python падает с ошибкой.
Когда встречается: когда программист забыл про области видимости переменных или не использовал команду global .
Что делать с ошибкой UnboundLocalError: local variable referenced before assignment
Главное — определиться с областью видимости и решить, какую переменную вы хотите использовать: локальную или глобальную.
Если вам нужна локальная переменная, то её нужно добавить внутрь функции. Имя переменной при этом может совпадать с именем такой же глобальной переменной, но она никак на неё не повлияет. В этом случае нужно в функцию добавить строку x = , например:
x = 10 def sum(): x = 11 x = x + 5 # выводим сумму с локальной переменной = 16 print(x) sum() # выводим значение глобальной переменной # оно не поменялось и равно 10 print(x)
Если мы хотим внутри функции работать с глобальной переменной, то её также нужно добавить в функцию командой global . После этого всё, что мы сделаем внутри функции с этой переменной, будет влиять и на значение глобальной переменной. Работает это так:
x = 10 def sum(): global x x = x + 5 # выводим сумму с глобальной переменной = 15 print(x) sum() # выводим значение глобальной переменной # оно поменялось и равно 15 print(x)
[Решение] Как избежать ошибки UnboundLocalError
При работе с Python, могут возникнуть различные ошибки, которые могут привести к тому, что ваша программа не будет работать правильно. Одной из таких ошибок является UnboundLocalError. В данной статье мы рассмотрим, что это за ошибка, как ее избежать и какие существуют методы ее решения.
Введение
Ошибка UnboundLocalError является одной из наиболее распространенных ошибок, возникающих при написании программ на языке Python. Эта ошибка возникает, когда вы пытаетесь использовать локальную переменную в функции, но переменная не определена.
Например, рассмотрим следующую функцию:
def my_function(): x = x + 1 print(x)
При вызове этой функции возникнет ошибка UnboundLocalError , поскольку переменная x не определена до момента ее использования в выражении x + 1.
Существует несколько способов решения этой ошибки.
Рассмотрим наиболее распространенные из них.
Используйте ключевое слово global
Ключевое слово global позволяет вам использовать глобальную переменную в функции. Если вы объявите переменную как глобальную, Python будет знать, что эта переменная не является локальной переменной и будет искать ее в глобальной области видимости.
x = 0 def my_function(): global x x = x + 1 print(x)
Передайте значение переменной как параметр
Если вы передадите значение переменной как параметр в функцию, то Python будет использовать эту переменную в качестве локальной переменной в функции. Это позволяет вам избежать ошибки UnboundLocalError .
def my_function(x): x = x + 1 print(x) my_function(0)
Используйте классы и методы
Если вы используете классы и методы в Python, то вы можете избежать ошибки UnboundLocalError , определяя переменные как атрибуты класса. Это позволяет вам использовать переменные в любом методе класса.
class MyClass: def __init__(self): self.x = 0 def my_method(self): self.x = self.x + 1 print(self.x) my_object = MyClass() my_object.my_method()
Ошибка UnboundLocalError может быть причиной многих проблем при написании программ на Python. Однако, с помощью приведенных выше решений, вы можете избежать этой ошибки и продолжать писать эффективный и читаемый код.
Заключение
В заключение, ошибка UnboundLocalError может быть очень раздражающей при написании программ на Python, но существует несколько способов ее избежать. Ключевое слово global, передача значений переменных как параметров и использование классов и методов могут помочь избежать этой ошибки. Важно помнить, что локальные переменные должны быть определены перед их использованием в функции. Следуя этим простым правилам, вы можете избежать ошибок UnboundLocalError и написать более эффективный и читаемый код на Python.
Программирую на Python с 2017 года. Люблю создавать контент, который помогает людям понять сложные вещи. Не представляю жизнь без непрерывного цикла обучения, спорта и чувства юмора.
Ссылка на мой github есть в шапке. Залетай.