当我在 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) 尝试打印
未初始化的局部变量并导致错误。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)