You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python UnboundLocalError调试:变量引用前未赋值问题

解决UnboundLocalError: local variable 'winnings' referenced before assignment

这个错误的核心原因是:你在函数内部先引用了winnings变量,之后又对它进行赋值操作,Python会默认将该变量判定为函数的局部变量,但引用时它还未被定义,因此触发报错。

常见修复方案:


1. 若winnings是全局变量,需声明使用全局作用域

如果winnings是在函数外部定义的全局变量,要在函数内部修改它,必须用global关键字声明:

# 全局变量定义
winnings = 0

def play_slot_machine():
    global winnings  # 声明使用全局的winnings变量
    # 模拟老虎机逻辑
    result = "cherry"
    if result == "cherry":
        winnings += 50  # 此时修改的是全局变量,不会报错
    print(f"当前 winnings: {winnings}")

play_slot_machine()

2. 若winnings是函数内部变量,确保先初始化再引用

如果变量只在函数内部使用,要在引用前完成初始化赋值:

def play_slot_machine():
    winnings = 0  # 先初始化局部变量
    result = "seven"
    if result == "seven":
        winnings = 100  # 此时是对已初始化的局部变量赋值
    elif result == "bar":
        winnings += 20  # 这里也不会报错,因为winnings已经初始化为0
    print(f"本次 winnings: {winnings}")

play_slot_machine()

3. 用函数返回值传递结果(更推荐的模块化写法)

避免直接依赖全局变量,让函数计算后返回winnings值,外部再接收:

def play_slot_machine(bet):
    winnings = 0
    # 模拟随机结果
    import random
    symbols = ["cherry", "bar", "seven", "lemon"]
    result = random.choice(symbols)
    
    if result == "seven":
        winnings = bet * 10
    elif result == "cherry":
        winnings = bet * 2
    
    return winnings

# 外部使用函数返回值
total = 0
total += play_slot_machine(10)
print(f"总 winnings: {total}")

自查要点:

  • 检查你的代码中,winnings是在函数外部定义的全局变量,还是仅在函数内部使用的局部变量
  • 确认在函数内部,所有对winnings的引用操作(比如print(winnings)、winnings += x)都发生在变量赋值之后,或者已经通过global声明了全局变量

内容的提问来源于stack exchange,提问作者elksie5000

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 04:15:27