2012-09-17 14 views
29

Powiel możliwe:
How do I check if a string is a number in Python?
Python - Parse String to Float or IntJak mogę sprawdzić, czy łańcuch ma w Pythonie wartość liczbową?

Na przykład, chcę sprawdzić ciąg i jeśli nie jest wymienialny na Integer (z int()), w jaki sposób można wykryć, że ?

+0

Istnieje już rozwiązanie tutaj http://stackoverflow.com/questions/354038/how-do-i-check-if-a-string-is-a-number-in-python – ronak

+0

Dla jasność, czy powinno być dozwolone "-99"? A co z "+123"? Lub "1729" (liczba całkowita z odstępami wiodącymi i końcowymi). "0x123"? –

+0

@MarkDickinson - dlaczego nie wolno "-99"? – mgilson

Odpowiedz

37

użyć .isdigit() method:

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

Cytowanie dokumentacji:

Zwraca wartość prawda, jeśli wszystkie znaki w łańcuchu są cyframi i jest co najmniej jeden znak, w przeciwnym wypadku false.

Dla unicode strun lub Python 3 strun, trzeba użyć bardziej precyzyjnej definicji i użyć unicode.isdecimal()/str.isdecimal() zamiast; nie wszystkie cyfry Unicode można interpretować jako liczby dziesiętne. U+00B2 SUPERSCRIPT 2 to cyfra, ale nie dziesiętna, na przykład.

+2

-1 dla 'a =" 0x12 "' a.isdigit() '>>> Fałsz – user1655481

+4

Nie spadłem, ale' "1234" .isdigit() 'będzie return 'False' nawet jeśli' int' z radością zignoruje przestrzeń z przodu. – mgilson

+1

@ user1655481: to także nie jest liczba, jest to literał w języku Pythona. 'int ('0x12')' wyrzuca ValueError, chyba że podasz bazę. –

28

Można zawsze try go:

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

Należy zauważyć, że metoda ta przyćmiewa isdigit jeśli chcesz wiedzieć, czy można przekonwertować ciąg znaków na liczbę zmiennoprzecinkową przy użyciu float

+3

Awans. Jest to bardziej pytonowo, po prostu spróbuj..z wyjątkiem :) – Ohad

Powiązane problemy