由于某种原因,此代码会产生错误:
为什么会发生这种情况?请注意,在这两种情况的开头都有
如果在函数内部删除导入,一切正常(这并不奇怪)。
import os
def main():
print(os.path.isfile('/bin/cat'))
import os
if __name__ == '__main__':
main()
结果:
Traceback (most recent call last):
File "test.py", line 10, in <module>
main()
File "test.py", line 5, in main
print(os.path.isfile('/bin/cat'))
UnboundLocalError: local variable 'os' referenced before assignment
为什么会发生这种情况?请注意,在这两种情况的开头都有
import os
。不知何故,在函数体末尾进行额外的导入会影响整个函数作用域。如果在函数内部删除导入,一切正常(这并不奇怪)。
import os
def main():
print(os.path.isfile('/bin/cat'))
# import os
if __name__ == '__main__':
main()
结果:
True
关于可能的重复问题:有一些类似的问题,但是与全局变量相关,而不是导入。
os
的全局变量。如果你在局部作用域中导入 os,则会创建一个名为os
的局部变量。如果你尝试在函数中使用一个在它被创建之前的局部变量,你会得到一个错误。 - khelwood