【问题标题】:Fixing UnboundLocalError修复 UnboundLocalError
【发布时间】:2018-07-11 15:37:04
【问题描述】:
def main():
    cash = float(input("How much money: "))
    coins = 0

def changeCounter(n):
    while True:
        if cash - n > 0:
            cash -= n
            coins += 1
        else:
            break
    return

main()
changeCounter(0.25)

当我运行这段代码时,我得到了错误

UnboundLocalError:赋值前引用了局部变量“cash”

我该如何解决这个问题?

【问题讨论】:

标签: python


【解决方案1】:

问题在于变量cashcoins 仅存在于函数main 的“范围”内,即在changeCounter 中不可见。试试:

def main():
    cash = float(input("How much money: "))
    coins = 0
    return cash, coins

def changeCounter(n, cash, coins):
    while True:
        if cash - n > 0:
            cash -= n
            coins += 1
        else:
            break
    # return
    return coins # presumably

cash, coins = main()
changeCounter(0.25, cash, coins)

【讨论】:

    【解决方案2】:

    您需要将cashcoins 定义为global variable

    cash = 0
    coins = 0
    
    def main():
        global cash, coins
    
        cash = float(input("How much money: "))
        coins = 0
    
    def changeCounter(n):
        global cash, coins
    
        while True:
            if cash - n > 0:
                cash -= n
                coins += 1
            else:
                break
        return
    
    main()
    changeCounter(0.25)
    

    但比将状态存储在全局变量中更好的方法是使用 返回变量和函数参数或其他方法。看 Why are global variables evil?

    【讨论】:

    • 你也需要将coins设为全局。
    • 如果您将现金保持为全球性,那么您也应该将硬币保持为全球性。
    猜你喜欢
    • 2015-06-24
    • 1970-01-01
    • 2021-04-07
    • 1970-01-01
    • 1970-01-01
    • 2020-05-16
    • 2016-02-10
    • 1970-01-01
    • 2021-01-23
    相关资源
    最近更新 更多