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

使用tkinter开发科学计算器时eval()报unexpected EOF while parsing错误求助

问题分析与修复方案

1. 触发unexpected EOF while parsing的核心原因

你的process函数存在缩进错误,导致代码结构不完整:在else:(对应if evaluatory:的分支)后面没有缩进的代码块,直接跟了下一个if button_value != "AC"语句,Python解析器无法识别完整代码块,因此抛出该错误。

修正后的process函数代码

#Handles event of button presses
def process(button_value,evaluatory):
  global expression
  global started
  global entry
  global mode
  global ANS
  if not started:
    started=True
    entry.delete(0,tk.END)
  modes=["Rad","Deg"]
  if button_value in modes:
    mode=button_value
  if button_value == "=":
    expression=entry.get()
    expression=checkthrough(expression)
    if expression.count("(") != expression.count(")"): #Means brackets must be closed before eval() called
      m.showinfo("Syntax","Remember to check your\n bracket count and\nmake sure they are\nall complete!")
    else:
      # 新增try-except捕获计算错误,避免程序崩溃
      try:
        ANS=eval(expression)
        entry.delete(0,tk.END)
        entry.insert(0,ANS)
        started=False
      except Exception as e:
        m.showinfo("计算错误", f"表达式无效:{str(e)}")
        started=False
  else:
    if evaluatory:
      entry.insert(tk.END,button_value.replace(" ",""))
    else:
      # 修复缩进:将后续代码放入else块内
      if button_value != "AC":
        entry.insert(tk.END,insert_values[button_value])
      else:
        entry.delete(0,tk.END)

2. 其他关键错误修复

  • 窗口无法启动:main函数末尾的window.mainloop缺少括号,应改为window.mainloop(),否则程序无法进入GUI事件循环。
  • arcsine函数逻辑错误:Rad模式下错误地将结果转为角度,修正后:
def arcsine(number):
  global mode
  if mode == "Deg":
    return math.degrees(math.asin(number))
  else:
    return math.asin(number)  # 移除多余的math.degrees调用

3. 额外优化建议

  • 虽然eval()在计算器场景下可用,但建议后续考虑用更安全的表达式解析方式(如ast模块)替代,避免潜在安全风险。
  • 可以为按钮添加hover效果,提升交互体验。
  • 支持表达式编辑(如光标移动、删除单个字符),增强实用性。

内容的提问来源于stack exchange,提问作者Shaken not Stirred

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 07:15:37