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
相关产品推荐
相关产品推荐

