2012-09-17 40 views
29

thể trùng lặp:
How do I check if a string is a number in Python?
Python - Parse String to Float or IntLàm cách nào để kiểm tra xem chuỗi có giá trị bằng số trong Python không?

Ví dụ, tôi muốn kiểm tra một chuỗi và nếu nó không phải là chuyển đổi thành số nguyên (với int()), làm thế nào tôi có thể phát hiện rằng ?

+0

Hiện đã là một giải pháp ở đây http://stackoverflow.com/questions/354038/how-do-i-check-if-a-string-is-a-number-in-python – ronak

+0

Đối rõ ràng, nên '-99' được phép? Điều gì về '+123'? Hoặc "1729" (số nguyên có dấu cách đầu và cuối). '0x123'? –

+0

@MarkDickinson - tại sao không cho phép '' -99'' được cho phép? – mgilson

Trả lời

37

Sử dụng .isdigit() method:

>>> '123'.isdigit() 
True 
>>> '1a23'.isdigit() 
False 

Trích dẫn tài liệu:

Trả về true nếu tất cả các ký tự trong chuỗi là các chữ số và có ít nhất một ký tự, ngược lại sai.

Đối unicode chuỗi hoặc Python 3 dây, bạn sẽ cần phải sử dụng một định nghĩa chính xác hơn và sử dụng unicode.isdecimal()/str.isdecimal() thay; không phải tất cả các chữ số Unicode đều có thể diễn giải dưới dạng số thập phân. Ví dụ: U+00B2 SUPERSCRIPT 2 là chữ số, nhưng không phải là số thập phân.

+2

-1 cho 'a =" 0x12 "' a.isdigit() '>>> Sai – user1655481

+4

Tôi đã không downvote, nhưng' "1234" .isdigit() 'sẽ trả về 'False' mặc dù' int' sẽ vui vẻ bỏ qua khoảng trống ở phía trước. – mgilson

+1

@ user1655481: đó không phải là một số hoặc là, nó là một hex hex literal. 'int ('0x12')' ném ValueError trừ khi bạn chỉ định một cơ số. –

28

Bạn có thể luôn try nó:

try: 
    a = int(yourstring) 
except ValueError: 
    print "can't convert" 

Lưu ý rằng phương pháp này rạng rỡ hơn isdigit nếu bạn muốn biết nếu bạn có thể chuyển đổi một chuỗi thành một số dấu chấm động sử dụng float

+3

Upvote. Đó là thêm pythonic để chỉ cần thử..except :) – Ohad

Các vấn đề liên quan