请教一个 random.random 的问题

2017-08-12 10:03:33 +08:00
 saximi
import random

def func(ok):
if ok:
a=random.random()
else:
import random
a=random.randint(1,10)
return a

func(True)

上面代码报错如下:
a=random.random()
UnboundLocalError: local variable 'random' referenced before assignment

请问这是为什么呢?
2381 次点击
所在节点    Python
8 条回复
minvacai
2017-08-12 10:09:28 +08:00
我有一个问题,你为什么要在 else 后面又 import random 一次
rogerchen
2017-08-12 10:13:16 +08:00
下边那句 random 把你害了,import random 相当于在 func 里边定义了 random 这个变量,根据 bleg 的顺序,覆盖了全局的 random。但是进入第一个分支的时候 random 这个名字还没有被绑到模块上。
saximi
2017-08-12 10:41:45 +08:00
@rogerchen 感谢指点,这个代码不是我自己写出来的,是某个公众号里写的,只说这是经典错误,但是没说原因是什么,所以我发出来请教大家。
rogerchen
2017-08-12 10:47:45 +08:00
这个错误一点也不经典,杂糅了太多东西。经典错误是这个

a=1
def f()
print a
a=2
f()
Miksztowi
2017-08-12 13:50:59 +08:00
@rogerchen legb
saximi
2017-08-12 19:11:59 +08:00
@rogerchen 这个错误确实经典,def f() 后面没有加冒号,哈哈
Kobayashi
2017-08-13 15:45:31 +08:00
@saximi 显然冒号是漏打。变量提升导致的引用全局变量 a 失败。
saximi
2017-08-15 00:33:08 +08:00
@Kobayashi 呵呵,我知道是 a 的错误,开个玩笑啦

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

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

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

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

© 2021 V2EX