Python中请教一个关于random.random函数的问题

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

请问这是为什么呢?
Python中请教一个关于random.random函数的问题


9 回复

我有一个问题,你为什么要在 else 后面又 import random 一次


我无法理解你的问题

下边那句 random 把你害了,import random 相当于在 func 里边定义了 random 这个变量,根据 bleg 的顺序,覆盖了全局的 random。但是进入第一个分支的时候 random 这个名字还没有被绑到模块上。

感谢指点,这个代码不是我自己写出来的,是某个公众号里写的,只说这是经典错误,但是没说原因是什么,所以我发出来请教大家。

这个错误一点也不经典,杂糅了太多东西。经典错误是这个

a=1
def f()
print a
a=2
f()

这个错误确实经典,def f() 后面没有加冒号,哈哈

显然冒号是漏打。变量提升导致的引用全局变量 a 失败。

呵呵,我知道是 a 的错误,开个玩笑啦

回到顶部