isinstance(raw_input("number: ")), int)
luôn mang lại False
vì kết quả trả về đối tượng chuỗi là raw_input
.
Sử dụng try: int(...) ... except ValueError
:
number = raw_input("number: ")
try:
int(number)
except ValueError:
print False
else:
print True
hoặc sử dụng str.isdigit
:
print raw_input("number: ").isdigit()
LƯU Ý thứ hai mang lại cho False
-4
vì nó chứa ký tự không chữ số. Sử dụng thứ hai nếu bạn chỉ muốn chữ số.
CẬP NHẬT Như J.F. Sebastian đã chỉ ra, str.isdigit
phụ thuộc vào miền địa phương (Windows). Nó có thể trả lại True
thậm chí int()
sẽ tăng ValueError cho đầu vào.
>>> 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'
Hoặc, nếu họ muốn chuyển biến thành một số, 'số = int (số)' – SethMMorton
'str.isdigit()' có thể phụ thuộc vào miền địa phương (vì Microsoft) tức là, nó có thể trả về 'True' ngay cả' int() 'sẽ tăng ValueError cho đầu vào. – jfs
@ J.F.Sebastian, 'raw_input()' trả về một đối tượng 'str', không phải là đối tượng' unicode'. Vì vậy, tôi nghĩ 'str.isdigit' sẽ hoạt động như mong đợi. Ông có thể cho tôi một ví dụ. – falsetru