我有一个包含几个命令的应用程序。 当您键入某个命令时,您必须输入有关某事/某人的其他信息。 现在信息必须严格地是整数或字符串,具体取决于具体情况。
然而,无论你使用raw_input()输入Python是什么,实际上都是一个字符串,无论如何,更具体地说,我怎么会很快和没有尝试...除了看变量是由数字还是字符组成? / p>
答案 0 :(得分:63)
在我看来,你有两个选择:
只是尝试将其转换为int
,但要抓住异常:
try:
value = int(value)
except ValueError:
pass # it was a string, not an int.
这是Ask Forgiveness方法。
显式测试字符串中是否只有数字:
value.isdigit()
仅当字符串中的所有字符都是数字(True
- 0
)时, str.isdigit()
才会返回9
。
unicode
/ Python 3 str
等效类型为unicode.isdecimal()
/ str.isdecimal()
;只有Unicode十进制可以转换为整数,因为并非所有数字都有一个实际的整数值(U+00B2 SUPERSCRIPT 2是一个数字,但不是一个小数,例如)。
这通常称为Ask Permission方法,或Look Before You Leap。
后者不会检测到所有有效的int()
值,因为+
值中也允许使用空格和-
以及int()
。第一种形式会很乐意接受' +10 '
作为数字,后者则不会。
如果您希望用户正常输入整数,请使用第一个表单。在这种情况下,要求宽恕而不是许可更容易(也更快)。
答案 1 :(得分:19)
如果你想检查它是什么:
>>>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
答案 2 :(得分:7)
isdigit
method of the str
type如果给定的字符串只是一个或多个数字,则返回True
。如果不是,您知道字符串应该被视为一个字符串。
答案 3 :(得分:2)
根据您对很快的定义,您可以使用以下选项之一:
try: int(your_input); except ValueError: # ...
your_input.isdigit()
format
parse
答案 4 :(得分:1)
不要检查。继续并假设它是正确的输入,并且如果不是则捕获异常。
intresult = None
while intresult is None:
input = raw_input()
try: intresult = int(input)
except ValueError: pass