49

我有一个包含几个命令的应用程序。当您输入某个命令时,您必须输入有关某事/某人的附加信息。现在该信息必须是严格的整数或字符串,具体取决于情况。

但是,无论您使用 raw_input() 在 Python 中输入什么,实际上都是一个字符串,无论如何,更具体地说,我将如何快速且不尝试...除非查看变量是由数字还是字符组成?

4

5 回答 5

99

在我看来,你有两个选择:

  • 只需尝试将其转换为int,但捕获异常:

    try:
        value = int(value)
    except ValueError:
        pass  # it was a string, not an int.
    

    这是请求宽恕的方法。

  • 显式测试字符串中是否只有数字:

    value.isdigit()
    

    str.isdigit()True仅当字符串中的所有字符都是数字 ( 0- ) 时才返回9

    / unicodePython 3str类型等价物是unicode.isdecimal()/ str.isdecimal();只有 Unicode 小数可以转换为整数,因为并非所有数字都有实际的整数值(例如 U+00B2 SUPERSCRIPT 2是数字,但不是小数)。

    这通常被称为“询问许可”方法,或“先看后跳”。

后者不会检测到所有有效值int(),如空格,+并且值-中也允许使用and int()。第一种形式很乐意接受' +10 '作为数字,后者不会。

如果您希望用户通常会输入一个整数,请使用第一种形式。在这种情况下,请求宽恕比请求许可更容易(也更快)。

于 2013-05-10T18:12:25.250 回答
34

如果你想检查它是什么:

>>>isinstance(1,str)
False
>>>isinstance('stuff',str)
True
>>>isinstance(1,int)
True
>>>isinstance('stuff',int)
False

如果你想从 raw_input 获取整数

>>>x=raw_input('enter thing:')
enter thing: 3
>>>try: x = int(x)
   except: pass

>>>isinstance(x,int)
True
于 2013-05-10T18:11:43.507 回答
7

如果给定的字符串只是一个或多个数字,则该类型isdigit方法str返回。True如果不是,您知道该字符串应该被视为一个字符串。

于 2013-05-10T18:08:53.700 回答
2

根据您的定义,您可以使用以下选项之一:

于 2013-05-10T18:16:19.033 回答
1

不要检查。继续假设它是正确的输入,如果不是,则捕获异常。

intresult = None
while intresult is None:
    input = raw_input()
    try: intresult = int(input)
    except ValueError: pass
于 2013-05-10T18:12:54.413 回答