UnBoundLocalError:赋值之前引用的局部变量(Python)
作者:互联网
我正在尝试创建一个函数Servo_to_quadrant,该函数返回值Servo_quadrant.
与此类似的问题涉及到函数外部的全局变量存在问题.在这种情况下,我认为这不是问题所在,因为仅从函数内部需要变量(尽管我可能错了).
码:
def servo_to_quadrant(servo_val):
if servo_val < 0: 360 + servo_val
if servo_val >= 360: servo_val = servo_val - 360
if servo_val >= 0 and servo_val < 90: servo_quadrant = 1
if servo_val >= 90 and servo_val < 180: servo_quadrant = 2
if servo_val >= 180 and servo_val < 270: servo_quadrant = 3
if servo_val >= 270 and servo_val < 360: servo_quadrant = 4
return servo_quadrant
servo_val = -30
quadrant = servo_to_quadrant(servo_val)
print(quadrant)
错误:
Traceback (most recent call last):
File "test2.py", line 11, in <module>
quadrant = servo_to_quadrant(servo_val)
File "test2.py", line 8, in servo_to_quadrant
return servo_quadrant
UnboundLocalError: local variable 'servo_quadrant' referenced before assignment
解决方法:
这是因为在函数中的if条件下,您已在前面的一个条件中分配了变量伺服器_象限,并且如果没有条件返回True,则您将没有任何伺服器_象限.为了解决这个问题,您需要在函数中初始化此变量.
您可以在函数的顶层放置Servo_quadrant = 0,或者可以在返回任何内容之前检查servo_quadrant的值:
if servo_quadrant :
return servo_quadrant
return None
另请注意,您需要重新分配变量Servo_val:
if servo_val < 0: servo_val=360 + servo_val
演示:
def servo_to_quadrant(servo_val):
servo_quadrant=0
if servo_val < 0: servo_val=360 + servo_val
if servo_val >= 360: servo_val = servo_val - 360
if servo_val >= 0 and servo_val < 90: servo_quadrant = 1
if servo_val >= 90 and servo_val < 180: servo_quadrant = 2
if servo_val >= 180 and servo_val < 270: servo_quadrant = 3
if servo_val >= 270 and servo_val < 360: servo_quadrant = 4
return servo_quadrant
servo_val = -30
quadrant = servo_to_quadrant(servo_val)
print quadrant
结果:
4
标签:python,variables,variable-assignment,local 来源: https://codeday.me/bug/20191009/1881861.html