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

Python中Try块触发KeyError但Except块未执行的问题排查

问题分析与解决

问题原因

你的代码里,player[item['Type']] = item['Name']是赋值操作,Python字典的赋值逻辑是:如果目标键不存在,会自动新增这个键值对,不会抛出KeyError。这就是except块从未执行的核心原因。

而你之前测试时打印player[item['Type']]是读取操作,此时键不存在才会触发KeyError,两者的行为逻辑完全不同。

解决方案

根据你的需求,有几种可行的实现方式:

方式1:直接检查键是否存在

if item['Type'] in player:
    player[item['Type']] = item['Name']
else:
    player['Weapon'] = item['Name']

方式2:用try-except捕获读取异常

如果一定要保留try-except结构,需要先执行读取操作触发异常,再进行赋值:

try:
    # 先执行读取,触发KeyError
    _ = player[item['Type']]
    player[item['Type']] = item['Name']
except KeyError:
    player['Weapon'] = item['Name']

方式3:用dict.get()简化判断

if player.get(item['Type']) is not None:
    player[item['Type']] = item['Name']
else:
    player['Weapon'] = item['Name']

注意:建议不要使用空的except:,应明确捕获KeyError,避免误捕获其他意外异常(比如item本身不存在'Type'键的情况)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 03:43:14