[英]Another UnboundLocalError in Python2.7
在公司的Python项目中执行测试脚本时,出现以下错误:
UnboundLocalError: local variable 'a' referenced before assignment
我编写了一些更简单的代码来重现该问题,它有2个文件。
vars.py文件:
#!/usr/bin/env python
a = 'aaa'
script.py文件:
#!/usr/bin/env python
from vars import *
def myFunc1():
print a
if False:
a = '111'
print a
myFunc1()
执行代码:
$ python --version
Python 2.7.10
$ python script.py
Traceback (most recent call last):
File "script.py", line 13, in <module>
myFunc1()
File "script.py", line 6, in myFunc1
print a
UnboundLocalError: local variable 'a' referenced before assignment
$
我用Google搜索了UnboundLocalError
,发现了一些有用的信息,例如:
UnboundLocalError:赋值Python之前引用了局部变量'L'
根据以上2个问题的答案,如果我在script.py文件的def myFunc1():
行之后添加global a
,则错误消失了。
我不明白的是从myFunc1
删除if
条件也可以使它工作...
分配名称会使该名称成为局部变量,这意味着没有附加语法就无法分配给非局部变量。 在您的代码中:
from vars import *
def myFunc1():
print a # the local variable `a` is used before it is created
if False:
a = '111' # this creates a local variable `a`
print a
加入global a
作为第一线myFunc1
会告诉Python的,当它看到一个分配给它不应该创建一个局部变量a
。 尽管几乎可以肯定它不会做您期望的事情(假设您期望a
in vars
被更改。)。 from vars import *
创建了本地名称的“副本” vars
,并使用global
声明只是意味着你要指派给该模块是a
变量。 导入vars
其他模块将看不到分配。
删除if语句也会删除分配,这就是为什么可以消除错误的原因。
我了解从vars import *并在vars.py中使用变量不是一个很好的设计...但是我无法将所有需要的变量传递给函数,因为该函数可能会使用公司的vars.py中的20多个变量项目
颤抖 ..请重构。
对于此特定问题,应使用以下模式:
import vars
def myFunc1():
print vars.a
if False:
vars.a = '111'
print vars.a
您应该将值传递给函数,而不要依赖全局变量。 另外,如果False并没有真正做任何事情,因为它将始终返回True。 您可能要说变量是否:
#!/usr/bin/env python
from vars import *
def myFunc1(x):
print x
if x:
x = '111'
print x
myFunc1(a)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.