【问题标题】:How do I get a eval statement to run the numbers as floats如何获得 eval 语句以将数字作为浮点数运行
【发布时间】:2026-01-05 17:25:02
【问题描述】:

我创建了一个 GUI 计算器(包括屏幕截图),当按下按钮时,它会将文本添加到 textctrl,以便向用户显示方程式。当用户按下回车键时,它会获取该文本并使用 eval 运行它,然后使用 SetValue 打印,但是如果我在 texctrl 中遇到问题,例如 5/6,它会显示为 0 我如何使它成为浮点数

def eenter(self,e):
    a=self.box.GetValue()
    answer=eval(a)
    ans=str(answer)
    self.box.SetValue(ans)

【问题讨论】:

  • 在这种情况下,他为什么要小心eval?它是一个桌面程序。任何能够输入__import__("shutil").rmtree("/")的人都可以打开一个命令提示符并在那里输入一个同样具有破坏性的命令。除非他正在为信息亭编写应用程序,但这似乎不太可能。

标签: python user-interface floating-point wxpython eval


【解决方案1】:

放在文件顶部:

from __future__ import division

这重新定义了/ 的含义,因此它始终是浮点除法。 (整数除法为//。)

有关这意味着什么的更多信息,请参阅PEP 238

【讨论】:

    【解决方案2】:

    只需在程序的开头添加以下行:

    from __future__ import division

    这将使除法在 Python 2.x 中的行为与在 Python 3.x 中一样:如果整数运算符会产生十进制数,则自动转换为浮点数。

    【讨论】:

      【解决方案3】:

      您可以尝试将输入更改为:

      5/6.0
      

      上面会将结果转换为float类型

      【讨论】:

      • 是的,我知道,但我不想每次需要十进制答案时都这样做