背景:
- python2.7
- windows7
- pycharm
错误内容:
coding:utf-8
import random
def func(ok):
if ok:
a = random.randint(1,10)
else:
import random
a = random.randint(1, 10)
print a
return a
if __name__ == '__main__':
func(True)
错误提示:
Traceback (most recent call last):
File "F:/***/test_two.py", line 15, in <module>
func(True)
File "F:/***/test_two.py", line 6, in func
a = random.randint(1,10)
UnboundLocalError: local variable 'random' referenced before assignment
个人的尝试:
这是来源于一篇文章,在解释关于命名空间和作用域时举的例子。
,但是,并没有解释为什么。而我也不能明白出现错误的原理。在我的认知里面,如果local()
中找不到random
,那就到global
中寻找random
,那么肯定是能够找到顶部的random
的,为何会出现UnboundLocalError
的错误?
然后我进行了如下的尝试:
test_1
# coding:utf-8
import random
def func(ok):
if ok:
try:
a = random.randint()
except:
global random
a = random.randint(1,10)
else:
import random
a = random.randint(1, 10)
print a
return a
if __name__ == '__main__':
func(True)
结果显示
F:/****/test_two.py:9: SyntaxWarning: name 'random' is used prior to global declaration
global random
test_2
# coding:utf-8
def func(ok):
if ok:
try:
a = random.randint(1,10)
except:
global random
a = random.randint(1,10)
else:
import random
a = random.randint(1, 10)
return a
if __name__ == '__main__':
func(True)
错误:
F:/***/test_two.py:8: SyntaxWarning: name 'random' is used prior to global declaration
global random
Traceback (most recent call last):
File "F:/***/test_two.py", line 16, in <module>
func(True)
File "F:/***/test_two.py", line 9, in func
a = random.randint(1,10)
NameError: global name 'random' is not defined
test_3
# coding:utf-8
def func(ok):
if ok:
try:
a = random.randint(1,10)
except:
global random
a = random.randint(1,10)
else:
import random
a = random.randint(1, 10)
return a
if __name__ == '__main__':
func(False)
func(True)
F:/***/test_two.py:8: SyntaxWarning: name 'random' is used prior to global declaration
global random
test_4
# coding:utf-8
def func(ok):
if ok:
a = random.randint(0,10)
else:
import random
a = random.randint(1, 10)
return a
if __name__ == '__main__':
func(False)
func(True)
Traceback (most recent call last):
File "F:/***/test_two.py", line 13, in <module>
func(True)
File "F:/***/test_two.py", line 5, in func
a = random.randint(0,10)
UnboundLocalError: local variable 'random' referenced before assignment
有人可以帮我解释一下,为什么在例子中,会出现UnboundLocalError么?同时,为何在函数中执行到import random,后,global 能够得到random?这是python的什么原理或者规则?