2012-09-17 11 views
29

Eventuali duplicati:
How do I check if a string is a number in Python?
Python - Parse String to Float or IntCome posso verificare se una stringa ha un valore numerico in esso in Python?

Per esempio, voglio controllare una stringa e se non è convertibile in numero intero (con int()), come posso rilevare che ?

+0

Esiste già una soluzione qui http://stackoverflow.com/questions/354038/how-do-i-check-if-a-string-is-a-number-in-python – ronak

+0

Per chiarezza, dovrebbe essere permesso '-99'? Che dire di '+123'? O "1729" (intero con spazi iniziali e finali). '0x123'? –

+0

@MarkDickinson - perché non dovrebbe essere permesso '' -99''? – mgilson

risposta

37

Utilizzare la .isdigit() method:

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

Citando la documentazione:

Restituisce vero se tutti i caratteri nella stringa sono cifre e vi è almeno un carattere, falso altrimenti.

Per unicode stringhe o Python 3 stringhe, è necessario utilizzare una definizione più precisa e utilizzare il unicode.isdecimal()/str.isdecimal() invece; non tutte le cifre Unicode sono interpretabili come numeri decimali. U+00B2 SUPERSCRIPT 2 è una cifra, ma non un decimale, ad esempio.

+2

-1 per 'a =" 0x12 "' a.isdigit() '>>> False – user1655481

+4

Non ho fatto downvote, ma' "1234" .isdigit() ' ritorna 'False' anche se' int' ignorerà felicemente lo spazio nella parte anteriore. – mgilson

+1

@ user1655481: anche questo non è un numero, è un letterale esadecimale pitone. 'int ('0x12')' lancia ValueError a meno che non si specifichi una base. –

28

Si può sempre try esso:

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

Si noti che questo metodo mette in ombra isdigit se si desidera sapere se è possibile convertire una stringa in un numero in virgola mobile utilizzando float

+3

Voto positivo. È più pitonico da provare solo..eccesso :) – Ohad