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

Python转移嵌套字典实现装备功能报UnboundLocalError修复方法

嵌套字典装备转移功能报错修复

错误根因

报错是因为你写的del player_equip_weapons会直接删除整个字典变量,而不是清空字典里的内容。执行完这行后player_equip_weapons这个变量就不存在了,后续往这个变量里写键值对时,Python会将函数内的变量识别为局部变量,自然会抛出「引用前未赋值」的错误。
另外原代码还有两个隐性问题:

  • 武器属性里的"Name "键尾部多了空格,后续读取名称时很容易因为键名不匹配报错
  • 函数内修改全局字典没有显式声明作用域,部分Python版本下会出现作用域识别异常

修复后完整代码

player_inventory_weapons = {
    "0": {"Name": "Basic sword", "Sharpness": 10, "Fire level": 0, "Poison": 0, "Resistance addition": 5, "type": "weapons"}   
}

player_equip_weapons = {}

def equip():
    # 显式声明操作的是全局字典,避免作用域异常
    global player_inventory_weapons, player_equip_weapons
    inp = str(input("What item would you want to move over? "))
    if inp in player_inventory_weapons:
        # 清空已装备栏原有内容,满足「同时仅能装备一把武器」的要求,不要删除整个字典变量
        player_equip_weapons.clear()
        # 将选中武器从背包转移到已装备栏
        player_equip_weapons[inp] = player_inventory_weapons.pop(inp)
        print(f"装备成功:{player_equip_weapons[inp]['Name']}")
    else:
        print("输入的物品编号不存在,请重新输入")

equip()

关键修改说明

  • 删除错误的del player_equip_weapons写法,替换为.clear()方法清空字典内容,保留字典结构供后续写入装备数据
  • 函数开头添加global声明,明确两个字典的全局作用域,彻底解决UnboundLocalError报错
  • 修正原字典中Name键的多余尾部空格,避免后续属性读取时键名不匹配
  • 用字典的pop()方法一步完成「取背包物品+删除背包对应条目」的操作,逻辑更简洁
  • 增加操作成功/失败的提示,避免无反馈的情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 11:03:24