isinstance(raw_input("number: ")), int)
总是产生False
因为raw_input
返回字符串对象作为结果。
Use try: int(...) ... except ValueError
:
number = raw_input("number: ")
try:
int(number)
except ValueError:
print False
else:
print True
or use str.isdigit http://docs.python.org/2/library/stdtypes#str.isdigit:
print raw_input("number: ").isdigit()
NOTE第二个产量False
for -4
因为它包含非数字字符。如果您只需要数字,请使用第二个。
UPDATE正如 J.F.塞巴斯蒂安指出的那样,str.isdigit
与区域设置相关 (Windows)。它可能会返回True
even int()
会引发输入的 ValueError 。
>>> import locale
>>> locale.getpreferredencoding()
'cp1252'
>>> '\xb2'.isdigit() # SUPERSCRIPT TWO
False
>>> locale.setlocale(locale.LC_ALL, 'Danish')
'Danish_Denmark.1252'
>>> '\xb2'.isdigit()
True
>>> int('\xb2')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '\xb2'