Python字典初始化后仍报KeyError: '28-Jun-24',求排查错误原因
问题分析与修复
错误原因
报错的核心是**vega[coin]['28-Jun-24']这个键从未被初始化**,直接使用+=操作触发了KeyError:
- 第一个循环里,你仅为
data[coin]['columns']中的7个到期日(不含28-Jun-24)在vega[coin]中创建了键并赋值; - 第二个循环新增了
28-Jun-24到columns,但循环到该值时,vega[coin]中没有对应的键,执行vega[coin][expiry] += ...时,Python会先尝试读取该键的当前值,因键不存在直接抛出KeyError。
你用get方法处理的是data字典的取值,但vega字典中新增的键没有做默认值处理。
修复方案
把第二个循环中的赋值语句改成先通过get获取vega中已有值(不存在则取0),再加上新的数值:
for coin in ['BTC']: data[coin]['columns']=['27-Apr-24', '28-Apr-24', '29-Apr-24', '03-May-24', '10-May-24', '17-May-24', '31-May-24', '28-Jun-24'] for expiry in data[coin]['columns']: # 先获取vega中已有值,不存在则用0,再加上新计算的数值 vega[coin][expiry] = vega[coin].get(expiry, 0) + data[coin].get('Vega', {}).get('Total', {}).get(expiry, 0)
这样无论expiry是否在vega[coin]中存在,都会先拿到合法的初始值(0或已有值),再执行加法操作,避免KeyError。
内容的提问来源于stack exchange,提问作者Madan Raj
相关产品推荐
相关产品推荐

