![](/img/trans.png)
[英]I am getting the error that the local variable cruty referenced before assignment
[英]i am getting local variable referenced before assignment when i use that variable in try-except block
我正进入(状态
local variable 'flag' referenced before assignment
在 python 中。 我在这里做错了什么?
flag = 0
def abc():
while flag <= 10:
try:
print(10/0)
except Exception:
print('yo')
flag += 1
abc()
flag = 0
def abc(argument):
while argument <= 10:
try:
print(10/0)
except Exception:
print('yo')
argument += 1
abc(flag)
def abc():
flag = 0
while flag <= 10:
try:
print(10/0)
except Exception:
print('yo')
flag += 1
return flag
abc()
我会用这个。
这不是在 try/catch 中引用该变量的问题,而是在您使用它的 function 之外定义该变量的问题。 flag
在abc()
之外声明并且未声明为全局; 因此,python 不相信 function 中有一个名为flag
的变量可以使用。 (如果我是正确的, flag
被声明为__main__
的一部分,因为您可以在对abc()
的调用下方打印它而不会出现问题。)
如果您打算将flag
作计数器,则将其移动到def
中可以:
def abc():
flag = 0
while flag <= 10:
try:
print(10/0)
except Exception:
print('yo')
flag += 1
abc()
但是,如果您打算在其他地方使用它,则必须将其声明为全局(不推荐)或将其声明为局部变量然后返回。 如果它是在外部定义的,请考虑将其作为参数传递给abc
。
您是 Python 中变量作用域的受害者。 您需要的是global
关键字(关于该主题的精彩教程)。 在这种情况下:
flag = 0
def abc():
global flag
while flag <= 10:
try:
print(10/0)
except Exception:
print('yo')
flag += 1
abc()
请注意abc
定义开头的新global flag
行。 这告诉 function 关键字flag
应该来自全局 scope,而不是本地 scope。
作为旁注,使用全局变量通常被认为是不好的做法,所以我建议您考虑一下您的整体设计。 肯定有使用global
的有效时间,但是,尽可能避免使用它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.