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

函数外定义列表却触发UnboundLocalError错误求助

解决UnboundLocalError:函数内操作全局列表变量的问题

错误原因

在函数getinfo中,当你对Player0、Player5等变量执行赋值操作时,Python会默认将这些变量视为局部变量。但代码执行到Player0 = Player5时,Player5还未在函数内部定义,Python会优先查找局部变量,找不到就抛出UnboundLocalError,不会直接使用全局作用域的同名变量。

解决方案

方案1:使用global声明全局变量

通过global关键字明确告诉Python,这些变量是全局作用域的,函数内的赋值会直接修改全局变量:

Player1 = []
Player2 = []
Player3 = []
Player4 = []
Player5 = []
Player0 = []

def getinfo():
    # 声明所有需要操作的全局变量
    global Player0, Player1, Player2, Player3, Player4, Player5
    Atest = [1,2,3,4,5,6,7]
    Player0 = Player5
    Player5 = Player4
    Player4 = Player3
    Player3 = Player2
    Player2 = Player1
    Player1 = Atest

getinfo()

方案2:用字典统一管理玩家列表(更推荐)

把所有玩家列表放到一个字典中,避免单独维护多个变量,同时函数内操作字典元素无需额外声明:

# 用字典存储所有空列表
players = {
    "Player0": [],
    "Player1": [],
    "Player2": [],
    "Player3": [],
    "Player4": [],
    "Player5": []
}

def getinfo():
    Atest = [1,2,3,4,5,6,7]
    # 按顺序传递列表引用
    players["Player0"] = players["Player5"]
    players["Player5"] = players["Player4"]
    players["Player4"] = players["Player3"]
    players["Player3"] = players["Player2"]
    players["Player2"] = players["Player1"]
    players["Player1"] = Atest

getinfo()

额外说明

如果你的需求是复制列表内容(而非传递引用),比如修改Player5不会影响Player0,需要使用切片或list()创建新列表:

# 替换原赋值语句为:
Player0 = Player5[:]  # 或 Player0 = list(Player5)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 13:03:13