2012-09-17 18 views
29

Duplicar posible:
How do I check if a string is a number in Python?
Python - Parse String to Float or Int¿Cómo puedo verificar si una cadena tiene un valor numérico en Python?

Por ejemplo, quiero comprobar una cadena y si no se puede convertir a un entero (con int()), ¿Cómo puedo detectar que ?

+0

Ya existe una solución aquí http://stackoverflow.com/questions/354038/how-do-i-check-if-a-string-is-a-number-in-python – ronak

+0

Para claridad, ¿se debería permitir '-99'? ¿Qué pasa con '+123'? O "1729" (entero con espacios iniciales y finales). '0x123'? –

+0

@MarkDickinson: ¿por qué no se permitiría ''-99''? – mgilson

Respuesta

37

Uso del .isdigit() method:

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

Citando la documentación:

Devuelve verdadero si todos los caracteres en la cadena son dígitos y hay al menos un carácter, de lo contrario, devuelve falso.

Para unicode cuerdas o cadenas de Python 3, tendrá que utilizar una definición más precisa y utilizar el unicode.isdecimal()/str.isdecimal() lugar; no todos los dígitos Unicode se pueden interpretar como números decimales. U+00B2 SUPERSCRIPT 2 es un dígito, pero no un decimal, por ejemplo.

+2

-1 para 'a =" 0x12 "' a.isdigit() '>>> Falso – user1655481

+4

No he bajado, pero' "1234" .isdigit() ' devuelve 'False' aunque' int' ignorará felizmente el espacio en el frente. – mgilson

+1

@ user1655481: tampoco es un número, es un literal hexadecimal de python. 'int ('0x12')' arroja ValueError a menos que especifique una base. –

28

Siempre se puede try que:

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

Tenga en cuenta que este método supera a isdigit si desea saber si se puede convertir una cadena en un número de punto flotante utilizando float

+3

Upvote. Es más pitónico intentarlo ... excepto :) – Ohad

Cuestiones relacionadas