【问题标题】:How do I get python to recognize that there has been no input如何让 python 识别没有输入
【发布时间】:2014-12-02 13:43:46
【问题描述】:

我想创建一个程序,如果用户在没有输入任何内容的情况下按下回车键,python 会识别出缺少输入并将其重新定位到适当的操作。例如:

some = int(input("Enter a number"))

if not some:
    print("You didn't enter a number")

else:
    print("Good job")

我希望发生的情况是,如果用户在没有输入值的情况下按下回车键,他们将收到第一条语句。但是,目前我只收到一个错误。谢谢。

编辑:关于放置 try catch 语句,我得到了各种回应。实际上,在我的原始代码中,我有一个针对 ValueError 的错误处理语句。但是,我想区分用户输入单词而不是数字和用户不输入任何内容。这可能吗?

【问题讨论】:

  • 可以是:if some is not None: 而不是if not some:
  • 不幸的是,仍然出现错误
  • 如果这个问题被标记为 python3.请在以后这样做。

标签: python input enter


【解决方案1】:

您收到此错误是因为给 input 的任何内容都应该是有效的 Python 表达式,但没有输入任何内容

SyntaxError: unexpected EOF while parsing

编辑:在 Python 3.x 中,输入正常 - 错误只会是下面的 ValueError。

你可以通过从input切换到raw_input来解决这个问题,但是int也无法解析空字符串,导致另一个错误:

ValueError: invalid literal for int() with base 10: ''

因此,您可以捕获产生的异常,或者使用条件语句检查空输入。后者更可取,因为您的代码中可能出现的其他错误可能会被异常处理所吞噬。

raw = raw_input("Enter a number: ")
if not raw:
    print "You didn't enter a number"
else:
    some = int(raw)
    print "Good job"

当然请注意,您可能仍需处理其他语法问题,例如如果有人输入的不是整数(例如“cat”)

【讨论】:

  • 有什么方法可以区分这个错误和普通的 ValueError 吗?因为在我的原始程序中,我有一个 try 异常语句,当用户输入一个单词而不是数字时,它会打印一个错误语句。但是,如果他们不输入任何内容,我想提供不同的声明。另外,因为我使用的是 Python 3,所以 raw_input 仍然适用吗?
  • int 遇到它无法处理的东西时的一般错误是ValueError,尝试区分特定类型的错误是可能的,但不必要地困难。使用条件语句将输入字符串与您想要涵盖的任何预期情况相匹配;即如果字符串为空,或者如果它不包含数字,如果它是一个浮点数,等等。
【解决方案2】:

您必须使用raw_input,然后使用try-catch 来检查您的输入。

data = raw_input('Enter number: ')
try:
    print('You gave me the number: %i' % int(data))
except:
    print("I need a number")

【讨论】:

    【解决方案3】:

    我在python官方文档here中搜索了一个类似的案例:

    while True:
        try:
            x = int(raw_input("Please enter a number: "))
            print "good job"
            break
        except ValueError:
            print "Oops!  That was no valid number.  Try again..."
    

    更新01

    代码更新如下:

    while True:
        try:
            x = raw_input("Please enter a number: ")
            x_mod = int(x)
            print "good job"
            break
        except ValueError:
            if len(x)==0:
                print "you entered nothing"
            else:
                print "Oops!  That was no valid number.  Try again..."
    

    【讨论】:

      【解决方案4】:

      我想这就是你要找的东西

      try:
          some = int(input("Enter a number"))
          print("Good job")
      except (SyntaxError, ValueError):
          print("You didn't enter a number")
      

      【讨论】:

        【解决方案5】:

        @user3495234 你可能已经解决了这个问题,但我会通过以下方式解决这个问题。

        import re
        
        some = input("Enter a number?\n>")
        reg = re.compile('^[+-]?(\d+\.\d+|\d+\.|\.\d+|\d+)([eE][+-]?\d+)?$')  
        # A regexp from the perldoc perlretut
        
        if some == "":
            print("Please enter something.")
        elif reg.match(some):
            x = float(some)  # To avoid type casting error
            y = int(x)  # Apparently int(float) = int
            print("Good job")
            print(y)  # Checking for value is integer or not.
        else:
            print("Looks like you didn't enter a number.")
        

        我尝试使用 isdigit() 方法来区分用户输入的是单词而不是数字,但这不适用于浮点数。 See this.

        将正则表达式更新为 perldoc perlretut 之一,因为之前的正则表达式在某些情况下会出错。

        【讨论】:

        • 如果我可以做些什么来改进我的答案,请告诉我。
        猜你喜欢
        • 1970-01-01
        • 2012-09-25
        • 2011-06-08
        • 2021-10-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-27
        • 1970-01-01
        相关资源
        最近更新 更多