我被python解释器抱怨在分配之前引用了一个局部变量foo
的情况感到难过,即使我已经明确导入了foo
包并且从未重新分配它。
请考虑以下代码:
import foo.bar
def qux():
if(foo.bar.fred()):
import foo.baz
print(foo.baz.waldo())
qux()
这会在if(foo.bar.fred()):
的行中引发UnboundLocalError。
这个问题似乎有一些与大多数UnboundLocalError情况不同的特定注意事项,我找不到在堆栈溢出或任何其他站点上发布的这种特定情况。
为什么上面的代码会引发异常?
答案 0 :(得分:2)
事实证明,由于隐式(隐藏)重新分配,引发了此异常。在函数的本地范围内导入foo.baz
时,它会将foo
重新指定为局部变量,而不是全局变量。