Ответ 1
isinstance(raw_input("number: ")), int)
всегда возвращает False
, потому что raw_input
возвращает объект строки в результате.
Используйте try: int(...) ... except ValueError
:
number = raw_input("number: ")
try:
int(number)
except ValueError:
print False
else:
print True
или используйте str.isdigit
:
print raw_input("number: ").isdigit()
ПРИМЕЧАНИЕ. Второй дает False
для -4
, потому что он содержит символ без цифр. Используйте второй, если хотите только цифры.
ОБНОВЛЕНИЕ. Как отметил Ю.Ф. Себастьян, str.isdigit
зависит от языка (Windows). Он мог бы возвращать True
даже 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'