有个 python 报错,请懂的解释一下该如何理解?

2016-07-22 14:16:22 +08:00
 hao1032
import time

def foo():
print time.time()
time = 1

foo()

执行后报错:
print time.time()
UnboundLocalError: local variable 'time' referenced before assignment

疑问,如果 foo 里面任何一句单独存在都不会报错。但是一起存在就出错。 python 的动态特性在这个情况下为什么不行了呢?
2374 次点击
所在节点    Python
3 条回复
besttime
2016-07-22 14:20:54 +08:00
肯定不可以啊 ,你模块名是 time 。一个变量名也是 time ,你的 time , Python 解释器是把它当成变量处理,还是模块处理呢?
2225377fjs
2016-07-22 14:21:55 +08:00
这是 Python 语言机制的特性,因为你在 foo 函数作用域里面有一个
time = 1
这里就理解成为了申明创建一个 time 变量,而且赋值为 1 ,会自动断开外部作用域里面 import 的 time 的关联。。
所以最外部的 time 变量就跟当前函数没有任何关系了。。。
而这个时候 time 的创建赋值之前又调用了 time.time(),所以就报错了。。。

总之: python 语言作用域的机制特性造成的问题。
2225377fjs
2016-07-22 14:23:26 +08:00
你在 time.time() 之前加上一个 global time 语句就可以了,就强制关联函了外部 import 的 time 了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/294196

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX