【问题标题】:Try/Except statement for widget entry box小部件输入框的 Try/Except 语句
【发布时间】:2020-03-08 20:59:47
【问题描述】:
try:
      float(self.entry_weight.get()) and int(self.entry_height.get())
      self.get_bears()
except:
      messagebox.showinfo("Number Error","Your weight and height must be a number!")

你好, 这个 try/except 语句似乎不起作用,当我在输入框中输入数字并单击相关按钮时,我只得到消息框,说我的输入不是数字。 我已经使用打印语句来确保我正在测试正确的输入框并且我是。当我测试我按预期返回的类型时,但如果这些字符串输入肯定是数字,那么 try except 语句应该可以工作。任何帮助都会非常感谢。

【问题讨论】:

  • and 关键字并不像您认为的那样。另一个提示:永远不要捕获所有可能的异常,只捕获你期望的异常,这样你就可以正确处理它们
  • @user8408080 - ...但除非重量为零。
  • 是的,0 被 Python 强制转换为 False,但你必须同意,这个检查不应该那样做
  • and 一旦检测到 False 就会短路。如果重量为零,则永远不会进行测试。如果您的目标是测试这两个值是否可以转换,请在没有“and”的单独行中进行
  • @user8408080 - 是的,我同意。只是它不是问题的解释。

标签: python tkinter


【解决方案1】:

你的 try/except 块覆盖了太多的领域。除了输入问题之外,它还可以捕获get_bears 可能出现的所有问题。此外,and 会短路,因此如果权重为 0,则永远不会进行第二次检查。您可以使用两个 try/except 块来覆盖所有内容

try:
    # validate input
    float(self.entry_weight.get())
    int(self.entry_height.get())
except ValueError:
      messagebox.showinfo("Number Error","Your weight and height must be a number!")
      return
try:
    self.get_bears()
except:
    messagebox.showinfo("Unhandled Error","Unknown error in program")
    # log it somewhere
    import traceback
    traceback.print_exc()
    # likely want to exit() because program is highly busted

【讨论】:

  • 谢谢,我在 self.get_bears() 中找到了问题
猜你喜欢
  • 1970-01-01
  • 2011-09-29
  • 1970-01-01
  • 2013-04-10
  • 1970-01-01
  • 2021-01-16
  • 2018-02-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多