【问题标题】:Why do modules sometimes raise an UnboundLocalError when imported locally? [duplicate]为什么模块在本地导入时有时会引发 UnboundLocalError? [复制]
【发布时间】:2018-06-29 07:43:25
【问题描述】:

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 情况的具体考虑,我在堆栈溢出或任何其他网站上找不到这个具体情况。

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

【问题讨论】:

    标签: python python-2.7 import scope


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2020-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-17
      • 2021-12-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多