提问者:小点点

UnboundLocalError:在Python3中赋值之前引用了局部变量“sum Ofodd”


我正在尝试运行以下代码:

number = input("Number: ")
valid = False
sumOfOdd = 0

def validation(credit_num):
    for i in range(len(credit_num)):
        if i % 2 != 0:
            sumOfOdd += i


def main():
    print(f"Your credit card number is {number}, it's third digit is {number[2]}")
    print(f'sum of odds: {sumOfOdd}')

validation(number)
main()

但我得到了这个错误:

Traceback (most recent call last):
  File "credit.py", line 15, in <module>
    validation(number)
  File "credit.py", line 8, in validation
    sumOfOdd += i
UnboundLocalError: local variable 'sumOfOdd' referenced before assignment

我可以运行,但当我输入任何数字时,它都会给我这个错误


共2个答案

匿名用户

这是解决办法

def validation(credit_num):
    global sumOfOdd
    for i in range(len(credit_num)):
        if i % 2 != 0:
            sumOfOdd += i

匿名用户

发生此错误是因为无法从函数内访问局部变量SUMOFODD。 您可以在函数中声明变量global,但使用global语句时要小心。

在我看来,更好的方法是提供sumofodd作为函数的参数,并返回更新后的变量:

def validation(credit_num, sumOfOdd):
    for i in range(len(credit_num)):
        if i % 2 != 0:
            sumOfOdd += i
    return sumOfOdd

validation(number, 0)
# Returns the correct sum.

或者,如果您知道SUMOFODD应该始终由零初始化,则可以在本地定义变量:

def validation(credit_num):
    sumOfOdd = 0
    for i in range(len(credit_num)):
        if i % 2 != 0:
            sumOfOdd += i
    return sumOfOdd