Python 向函数外部初始化的变量赋值时出现UnboundLocalError

Python 向函数外部初始化的变量赋值时出现UnboundLocalError,python,Python,我正在尝试向代码中添加python函数,但当我这样做时,会出现UnboundLocalError: 回溯(最近一次呼叫最后一次): 文件“/Users/name/Documents/project.py”,第44行,在 逻辑(硬币型,3.56,袋重,356,0.01) 文件“/Users/name/Documents/project.py”,第14行,逻辑中 ValueAddCoins+=值UnboundLocalError:赋值前引用的局部变量“ValueAddCoins” def逻辑(coi

我正在尝试向代码中添加python函数,但当我这样做时,会出现UnboundLocalError:

回溯(最近一次呼叫最后一次):

文件“/Users/name/Documents/project.py”,第44行,在 逻辑(硬币型,3.56,袋重,356,0.01)

文件“/Users/name/Documents/project.py”,第14行,逻辑中 ValueAddCoins+=值UnboundLocalError:赋值前引用的局部变量“ValueAddCoins”

def逻辑(coin_txt、w1、wBag、CWweight、vCoin):
差值=绝对值(wBag-重量)
如果差异==0:
打印(“行李正常”)
返回
硬币=diff/w1
价值=硬币*硬币
如果wBag小于CW重量:
ValueAdddCoins+=值
打印(整数(硬币),硬币(txt,“硬币缺失”)
打印(差异,“克太少”)
其他:
valueRemovedCoins+=价值
打印(整数(硬币),硬币(txt,“硬币太多”)
打印(差异,“克太多”)
valueAddedCoins=0
valueRemovedCoins=0
numBagsChecked=0
continueChecking=True;
继续检查时:
#询问有关硬币的信息并推断重量是否正确
bagWeight=浮子(输入(“硬币袋重量(无单位):”)
coinType=输入(“袋中硬币的类型:1便士还是2便士?”)
numBagsChecked+=1
如果硬币类型=“1便士”:
逻辑(硬币型,3.56,袋重,356,0.01)
elif硬币类型=2便士:
逻辑(硬币型,7.12,袋重,712,0.02)
检查=输入(“另一个行李?(Y/N):”)
如果检查==“N”:
continueChecking=False
为什么会出现UnboundLocalError?

您可以添加

global valueAddedCoins

定义函数后,变量值AdddCoins不在函数逻辑范围内 请参见主题中的示例

要修改它,您必须在函数内部将其声明为
global

def logic(coin_txt, w1, wBag, cWeight, vCoin):
    global valueAddedCoins
    valueAddedCoins += 1
但这通常被认为是非常糟糕的做法,因为这样的代码通常很难调试(因为很难找到这样的全局变量在哪里被修改,错误来自哪里)

另一种方法是传入它并返回它的修改值,如下所示:

def increment_int(valueAddedCoins):
    return valueAddedCoins += 1

valueAddedCoins = increment_int(valueAddedCoins)
这样,您将始终知道是什么修改了您的变量等。

可能的重复项
def increment_int(valueAddedCoins):
    return valueAddedCoins += 1

valueAddedCoins = increment_int(valueAddedCoins)