#python #global
#python #глобальный
Вопрос:
У меня есть некоторый код, который структурирован следующим образом
from my.modules import MyClass
Class AnotherClass(object):
def __init__(a): #line 5
if a:
setup_a()
else:
setup_b()
def setup_a():
# Do some stuff to get local_x
# ..
self.a = MyClass(local_x)
def setup_b():
# Do some stuff to get local_y
# ..
self.b = MyClass(local_y)
Однако я запускаю с a = True
в строке 5, он работает нормально, но когда я запускаю с a = False
, я получаю UnboundedLocalError
. Я понимаю, что обычно вызывает это (изменение глобальной переменной), и если я изменю setup_b () на:
def setup_b():
global MyClass
# Do some stuff to get local_y
# ..
self.b = MyClass(local_y)
Это работает правильно. Я просто не понимаю, почему я получаю эту ошибку, поскольку я не изменяю MyClass, создавая его экземпляр.
Примечание: Приведенный выше пример является базовой версией кода, а не фактическим кодом, вызывающим ошибку. Кто-нибудь знает, что вызывает эту ошибку?
Ответ №1:
Где-то в коде, которому вы не показываете, что присваиваете, вы присваиваете MyClass
, заставляя компилятор думать, что это локальная переменная, хотя это не так.
Комментарии:
1. Да, это было оно. У нас была серия импортов в рамках
self.b = MyClass(local_y)
одного из которых был неправильный импорт MyClass