为什么模块在本地导入时有时会引发UnboundLocalError?

时间:2018-01-20 01:24:03

标签: python python-2.7 import scope

我被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情况不同的特定注意事项,我找不到在堆栈溢出或任何其他站点上发布的这种特定情况。

为什么上面的代码会引发异常?

1 个答案:

答案 0 :(得分:2)

事实证明,由于隐式(隐藏)重新分配,引发了此异常。在函数的本地范围内导入foo.baz时,它会将foo重新指定为局部变量,而不是全局变量。