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