【问题标题】:Adding letters to my input box?在我的输入框中添加字母?
【发布时间】:2013-09-25 21:33:10
【问题描述】:

当我在输入框中输入字母或小数时,我收到此错误“ValueError: invalid literal for int() with base 10: 'g'”。输入框只输入整数,我想知道当他们尝试输入字母时是否可以给出一条消息说“你必须输入一个数字”或类似的东西。这是我的更多代码:

def checkAnswer():
    mainAnswer = entry1.get() 

    if len(mainAnswer) == 0:
        messagebox.showwarning(message='-You must enter some numbers first!')
        return
    if int(mainAnswer) != answer:
        messagebox.showwarning(message='Sorry...the correct answer is: ' + str(answer))
    else:
        messagebox.showinfo(message='Correct!')

【问题讨论】:

  • 这是python,对吧?

标签: python


【解决方案1】:

你得到的例外是当你尝试做int(mainAnswer)mainAnswer 不是一个数字。解决它的一种方法是这样做:

try:
    int(mainAnswer)
except ValueError:
    messagebox.showwarning(message="You must enter a number")
    return

# the rest of your code

【讨论】:

    【解决方案2】:
    try:
       int_answer = int(mainAnswer)
    except ValueError:
       int_answer = None
    if int_answer is None:
       ...  # Show the error.
    

    【讨论】:

      【解决方案3】:

      编辑:我想错了。这永远不会起作用,因为用户不会直接输入 int。

      我只会检查类型。此外,如果您使用 elif ,则不需要该空返回。您可能还需要反转类型检查和 len 检查,但我认为这对这个答案并不重要。

      def checkAnswer():
          mainAnswer = entry1.get() 
      
          if type(mainAnswer) != int:
              messagebox.showwarning(message='You must enter a number.')
          elif len(mainAnswer) == 0:
              messagebox.showwarning(message='-You must enter some numbers first!')    
          elif int(mainAnswer) != answer:
              messagebox.showwarning(message='Sorry...the correct answer is: ' + str(answer))
          else:
              messagebox.showinfo(message='Correct!')
      

      【讨论】:

      • 如果 mainAnswer 最初是 int,则 OP 不会得到他提到的异常。
      • 正是检查的目的。
      • 我的意思是这个检查将永远通过,因为即使用户输入了123,它也将是string,而不是int
      • 哦,我想错了。谢谢。我会编辑答案。
      猜你喜欢
      • 1970-01-01
      • 2014-06-24
      • 1970-01-01
      • 1970-01-01
      • 2013-08-11
      • 2015-07-14
      • 1970-01-01
      • 2021-01-08
      • 1970-01-01
      相关资源
      最近更新 更多