如何让python识别出没有输入

时间:2014-10-08 01:11:40

标签: python input enter

我想创建一个程序,如果用户按下回车键而不输入任何内容,python会识别缺少输入并将其重新定位到相应的操作。例如:

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

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

else:
    print("Good job")

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

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

5 个答案:

答案 0 :(得分:2)

您收到此错误是因为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")

答案 1 :(得分:1)

我在官方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..."

答案 2 :(得分:0)

您必须使用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 :(得分:0)

我认为这就是你正在寻找的东西

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

答案 4 :(得分:0)

@ 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,因为前一个正在某些情况下出错。