UnboundLocalError из импортированного класса

#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