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

明明字典中存在对应键,为何仍触发KeyError异常?

字典反向货币对KeyError问题排查

问题背景

需求是检查字典中某一货币对键的反向货币对是否存在,例如('EUR', 'USD')的反向为('USD', 'EUR')。但运行代码时明明反向货币对存在,却触发KeyError: '('IDR', 'EUR')'。

复现代码

dict_example={('EUR', 'IDR'): None, ('EUR', 'BGN'): None, ('EUR', 'CHF'): None, ('EUR', 'USD'): None, ('IDR', 'EUR'): None, ('IDR', 'BGN'): None, ('IDR', 'CHF'): None, ('IDR', 'USD'): None, ('BGN', 'EUR'): None, ('BGN', 'IDR'): None, ('BGN', 'CHF'): None, ('BGN', 'USD'): None, ('CHF', 'EUR'): None, ('CHF', 'IDR'): None, ('CHF', 'BGN'): None, ('CHF', 'USD'): None, ('USD', 'EUR'): None, ('USD', 'IDR'): None, ('USD', 'BGN'): None, ('USD', 'CHF'): None} 

for i in dict_example.keys():
   print(i)
   a='(\'{}\', \'{}\')'.format(i[1], i[0])
   print(dict_example[a])

问题原因

字典dict_example的键是元组类型(比如('EUR', 'IDR')),但代码里通过format生成的变量a是字符串类型(比如"('IDR', 'EUR')")。两者类型完全不同,即便字符串内容看起来和元组一样,字典也会判定为不同的键,因此触发KeyError。

解决方法

直接生成元组类型的反向货币对,不需要转换成字符串:

dict_example={('EUR', 'IDR'): None, ('EUR', 'BGN'): None, ('EUR', 'CHF'): None, ('EUR', 'USD'): None, ('IDR', 'EUR'): None, ('IDR', 'BGN'): None, ('IDR', 'CHF'): None, ('IDR', 'USD'): None, ('BGN', 'EUR'): None, ('BGN', 'IDR'): None, ('BGN', 'CHF'): None, ('BGN', 'USD'): None, ('CHF', 'EUR'): None, ('CHF', 'IDR'): None, ('CHF', 'BGN'): None, ('CHF', 'USD'): None, ('USD', 'EUR'): None, ('USD', 'IDR'): None, ('USD', 'BGN'): None, ('USD', 'CHF'): None} 

for i in dict_example.keys():
   print(i)
   a = (i[1], i[0])  # 直接生成元组
   print(dict_example[a])

这样a的类型和字典键的类型一致,就能正确匹配到对应的反向货币对键。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 00:05:05