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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 17:36:15