关于python:如何检查变量是整数还是字符串?

How to check if a variable is an integer or a string?

本问题已经有最佳答案,请猛点这里访问。

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

但是,无论你使用raw_input()输入Python是什么,实际上都是一个字符串,无论如何,更具体地说,我怎么会很快和没有尝试...除了看看变量是由数字还是字符组成?


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

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

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

    这就是Ask Forgiveness方法。

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

    1
    value.isdigit()

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

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

    这通常称为Ask Permission方法,或Look Before You Leap。

后者不会检测所有有效的int()值,因为在int()值中也允许空格和+-。第一种形式将乐意接受' +10 '作为数字,后者则不然。

如果您希望用户通常输入整数,请使用第一个表单。在这种情况下,要求宽恕而不是许可更容易(也更快)。


如果你想检查它是什么:

1
2
3
4
5
6
7
8
>>>isinstance(1,str)
False
>>>isinstance('stuff',str)
True
>>>isinstance(1,int)
True
>>>isinstance('stuff',int)
False

如果你想从raw_input获取整数

1
2
3
4
5
6
7
>>>x=raw_input('enter thing:')
enter thing: 3
>>>try: x = int(x)
   except: pass

>>>isinstance(x,int)
True


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


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

  • try: int(your_input); except ValueError: # ...
  • your_input.isdigit()
  • 使用正则表达式
  • 使用parse,它与format相反

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

1
2
3
4
5
intresult = None
while intresult is None:
    input = raw_input()
    try: intresult = int(input)
    except ValueError: pass