嵌套模块重新导入上的UnboundLocalError

托马斯·恰切尔

当我重新导入python 2.7中已经导入的模块时,出现UnboundLocalError。一个最小的例子是

#!/usr/bin/python

import sys

def foo():
    print sys
    import sys

foo()

Traceback (most recent call last):
  File "./ptest.py", line 9, in <module>
    foo()
  File "./ptest.py", line 6, in foo
    print sys
UnboundLocalError: local variable 'sys' referenced before assignment

但是,如果将嵌套导入作为函数定义中的第一条语句放置,则一切正常:

#!/usr/bin/python

import sys

def foo():
    import sys
    print sys

foo()

<module 'sys' (built-in)>

有人可以解释为什么第一个脚本失败吗?谢谢。

帕霍利克

这与引用全局变量相同。Python常见问题解答中有很好的解释

这是因为当您对作用域中的变量进行赋值时,该变量将成为该作用域的局部变量,并在外部作用域中隐藏任何类似命名的变量。由于foo中的最后一条语句为x分配了一个新值,因此编译器将其识别为局部变量。因此,当较早的print(x)尝试打印未初始化的局部变量时,将导致错误。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章