Tkinter按钮触发函数时出现KeyError:0错误求助
Tkinter按钮触发函数时的KeyError问题
错误回溯
Tkinter回调异常 回溯(最近的调用最后): 文件 "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\indexes\range.py", 第351行, 在get_loc中 return self._range.index(new_key) ValueError: 0不在范围内 上述异常是以下异常的直接原因: 回溯(最近的调用最后): 文件 "C:\ProgramData\Anaconda3\lib\tkinter\__init__.py", 第1892行, 在__call__中 return self.func(*args) 文件 "<ipython-input-18-518ef7ebbd84>", 第4行, 在myClick2中 a.plot(p1.total_payoff()[0],p1.total_payoff()[1]) 文件 "<ipython-input-10-57724152e4a6>", 第59行, 在total_payoff中 prices = self.option_payoff()[0] 文件 "<ipython-input-10-57724152e4a6>", 第47行, 在option_payoff中 temppayoff += callpayoff(i,j.get_strike(),j.find_bidask()[1])*j.get_quantity() 文件 "<ipython-input-6-59b6ad5c0680>", 第28行, 在find_bidask中 bid = data['bid'][0] 文件 "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\series.py", 第853行, 在__getitem__中 return self._get_value(key) 文件 "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\series.py", 第961行, 在_get_value中 loc = self.index.get_loc(label) 文件 "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\indexes\range.py", 第353行, 在get_loc中 raise KeyError(key) from err KeyError: 0
问题场景
点击Tkinter按钮执行函数时出现上述错误,该函数通过matplotlib绘制数据,代码如下:
def myClick2(): f = Figure(figsize=(4,4), dpi=100) a = f.add_subplot(111) a.plot(p1.total_payoff()[0],p1.total_payoff()[1]) a.grid(True, which='both') a.axhline(y=0, color='k') a.axvline(x=0, color='k') canvas = FigureCanvasTkAgg(f, master=root) canvas.draw() canvas.get_tk_widget().grid(row = 8, column = 1)
错误溯源至total_payoff调用option_payoff,再调用find_bidask方法中的bid = data['bid'][0]代码处。但该逻辑在Tkinter环境外单独运行时无异常,['bid'][0]可正常获取值,求助排查代码问题所在。
排查方向
- 数据状态验证:在
bid = data['bid'][0]前添加print(data['bid']),查看Tkinter触发时该Series的实际内容,确认是否为空或索引异常。 - 异步操作检查:如果
find_bidask涉及网络请求或异步数据加载,确保在Tkinter回调中数据已完全加载完成再访问索引。 - 实例状态确认:检查
p1实例在触发myClick2前的初始化状态,确认其关联的数据源未被意外修改或清空。 - Pandas取值方式修正:将
bid = data['bid'][0]改为bid = data['bid'].iloc[0],强制按位置而非标签取值,避免索引不匹配问题。
内容的提问来源于stack exchange,提问作者eraserman
相关产品推荐
相关产品推荐

