编程语言
首页 > 编程语言> > UnBoundLocalError:赋值之前引用的局部变量(Python)

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