【问题标题】:Simple Python input error简单的 Python 输入错误
【发布时间】:2016-01-22 00:39:41
【问题描述】:

我正在尝试编写代码来编辑列表并使其成为回文。

一切正常,除了我的输入仍然给我一个错误。当我在get_number_2 中输入非整数时,它会崩溃。

def get_number():
    num = raw_input("Please enter number between 100,000 and 1,000,0000: ")
    if not num.isdigit():
        print "---------------------------"
        print "Invalid input: numbers only"
        print "---------------------------"
        my_main()
    else:
        return num

def get_number_2(n):
    num = input("Please confirm the number you have entered: ")
    if num != int(n):
        print "--------------------"
        print "Entries do not match"
        print "--------------------"
        my_main()
    else:
        return num

我将get_number_2 的输入用于其余代码,因为get_number 在我检查它是否在两个数字之间时不起作用。

有什么方法可以验证输入是否是 get_number_2 中的 int,以便我可以摆脱 get_number

【问题讨论】:

    标签: python validation input int


    【解决方案1】:
    from operator import attrgetter
    num0 = input()
    if not attrgetter('isdigit')(num0)():
        print("that's not a number")
    

    【讨论】:

    • 请添加一些解释。仅代码 sn-p 不是真正的答案。
    • 很明显 attrgetter('isdigit')(num0)() 如果“num0”变量处的给定字符串是数字则返回 Trus,如果给定字符串是数字则返回 False如果不是,程序将正常运行,它将打印不是数字,如果您愿意,您可以停止执行或请求输入 agin
    • 你不应该把它放在评论中,而是扩大你的答案。这不是关于事情是否显而易见,而是关于 StackOverflow 的质量。您的回答被标记为低质量帖子,这就是我发表评论的原因,让您有机会改进您的帖子。否则将被删除。
    • @Firas 从初学者的角度考虑这一点。如果答案很明显,那么他们就不会问这个问题。如果有助于具体化,请仅关注 OP,并尝试解释 OP 似乎无法理解的部分。
    【解决方案2】:

    编写处理异常的程序。如果用户输入了无效的整数,则会抛出ValueError 异常:

    try:
        a = int(b)
    except ValueError:
        print "Unable to interpret your input as a number"
    

    您必须像这样更新您的问题:

    def get_number_2(n):
        num = input("Please confirm the number you have entered: ")
        try:
            if num != int(n):
                print "--------------------"
                print "Entries do not match"
                print "--------------------"
                my_main()
            else:
                return num
        except ValueError:
            print "Unable to interpret your input as a number"
    

    【讨论】:

      【解决方案3】:

      您还应该使用raw_inputint(num)

      def get_number_2(n):
          num = raw_input("Please confirm the number you have entered: ")
          if not num.isdigit() or int(num) != n:
              print "--------------------"
              print "Entries do not match"
              print "--------------------"
              my_main()
          else:
              return int(num)
      

      注意事项

      • 我假设参数n 是一个int,或者要检查这一点,您可以将if 更改为:if not num.isdigit() or not n.isdigit() or int(num) != int(n)
      • 通过使用isdigit,我们在真正将其转换为int之前检查它是否为整数。

      【讨论】:

      • 这仍然行不通,因为如果num 不是整数,int(num) 会抛出错误。
      • 不用了,因为我之前做过检查。
      【解决方案4】:

      你不能做num != int(n),因为它会尝试调用int(n),如果n实际上不是一个整数,这是无效的。

      正确的做法是使用tryexcept

      try:
        n = int(n)
      except ValueError:
        print 'Entry is not an integer.'
        #handle this in some way
      

      编辑:同样在 Python 2.x 中,请使用 raw_input() 而不是 input()input() 如果你不知道它在做什么,就会给出非常奇怪的结果。

      【讨论】:

      • 请不要使用裸的 except 语句。应该是except ValueError
      • 是的,但如果我可以验证 get_number_2 是否为 int,我可以丢弃 get_number 并消除匹配它们的需要?
      • @S_Sull 是的,您可以简单地执行 try: n = int(raw_input('Enter number: ')) except: ValueError: print 'Please enter an integer' 获取输入并将其转换为整数,如果不是整数则捕获。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多