【问题标题】:How do I check an input for an integer in Python?如何在 Python 中检查整数的输入?
【发布时间】:2015-11-12 20:19:46
【问题描述】:

我用过:

day = int(input('Please input the day you were born: e.g 8th=8 21st = 21 : '))
month = int(input('Please input the month you were born: e.g may = 5 december = 12 : '))
year = int(input('Please input the year you were born: e.g 2001 / 1961 : '))

if day == int and month == int and year == int:

但它总是即使它是一个整数也说它是错误的。

【问题讨论】:

  • type(day) is int
  • @axiom 你真的应该使用isinstance
  • 你使用的是 Python2 还是 Python3?
  • 由于将输入调用包装在int( 中,您的类型检查变得无用,因为只有两种可能性:1)日、月和年都是整数;或 2) 您的程序在前 3 行中因ValueError 而崩溃,if 将永远不会运行。
  • 您能否更详细地说明“但即使是整数也总是说它是错误的。”?您的错误输入和输出到底是什么?

标签: python input


【解决方案1】:
def get_int(p,error_msg="Thats Not An Int!"):
    while True:
         try:
            return int(raw_input(p))
         except (ValueError,TypeError):
            print "ERROR: %s"%error_msg

day = get_int('Please input the day you were born: e.g 8th=8 21st = 21 : ')
#day is guaranteed to be an int

我喜欢把它进一步抽象出来

 def force_type(type_class,prompt,error_msg):
     while True:
         try:
            return type_class(prompt)
         except (ValueError,TypeError):
            print error_msg

然后就变成了

 def get_int(p,err_msg):
     return force_type(int,p,err_msg)
 def get_float(p,err_msg):
     return force_type(float,p,err_msg)
 ...

如果你想进行类型检查,你应该~~使用type(var),你应该使用isinstance(var,int)

【讨论】:

  • 这还不够 OOP。你能让它更面向对象吗?
  • @MorganThrapp 确定 def get_int(self,p,err_msg): :P
  • 你可以给我解释一下吗
  • @benjiboi79 get_int 尝试将用户的输入返回给您(在转换为 int 之后)。如果由于某种原因失败(比如用户输入的不是数字),它会打印一条错误消息并提示用户重新输入。
  • @benjiboi79 重要的是要意识到在您输入int(...) 后,结果将是int。您不必再次测试。如果无法将其转换为int,它将引发异常(ValueErrorTypeError)并停止执行您的程序。当您的代码到达您要测试的地方时,它们是否是整数,它们保证是整数。
【解决方案2】:

要检查类型,您可以这样做:

type(aVar) is aType

无论如何,正如 Kevin 在评论中所说,您已经将输入包装到 int,所以要么它实际上是一个 int,要么您的程序崩溃了

【讨论】:

    【解决方案3】:

    试试

    if type(day) == int and type(month) == int and type(year) == int
    

    【讨论】:

    • 但这将是一个重言式。鉴于他的其余代码,无论何时执行该行代码,type(day) 将始终为int
    • 是的,但我只是想展示如何访问变量的类型。不知道为什么他把三个变量都声明为int,这样就不用比较了!
    • 不客气!如果您觉得有用,请点赞/接受答案
    猜你喜欢
    • 2014-03-28
    • 2018-05-19
    • 2016-02-07
    • 2013-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多