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

