¿Cómo comprobar si una variable es un entero o una cadena? [duplicar]
Esta pregunta ya tiene una respuesta aquí:
Tengo una aplicación que tiene un par de comandos. Cuando escribe un comando determinado, debe escribir información adicional sobre algo / alguien. Ahora esa información tiene que ser estrictamente un entero o una cadena, dependiendo de la situación.
Sin embargo, cualquier cosa que escribas en Python usando raw_input() en realidad es una cadena, no importa qué, así que más específicamente, cómo lo haría en breve y sin intentarlo...excepto ver si una variable está hecha de dígitos o caracteres?
5 answers
En mi opinión tienes dos opciones: {[17]]}
-
Solo intenta convertirlo en un
int
, pero captura la excepción:try: value = int(value) except ValueError: pass # it was a string, not an int.
Este es el enfoque de Pedir Perdón.
-
Prueba explícitamente si solo hay dígitos en la cadena:
value.isdigit()
str.isdigit()
devuelveTrue
sólo si todos los caracteres de la cadena son dígitos (0
-9
).El equivalente de tipo
unicode
/ Python 3str
esunicode.isdecimal()
/str.isdecimal()
; solo Unicode los decimales se pueden convertir en enteros, ya que no todos los dígitos tienen un valor entero real (U+00B2 El SUPERÍNDICE 2 es un dígito, pero no un decimal, por ejemplo).Esto a menudo se llama el enfoque Pedir Permiso, o Mirar Antes de Saltar.
Este último no detectará todos los valores int()
válidos, ya que los espacios en blanco y +
y -
también se permiten en los valores int()
. La primera forma aceptará felizmente ' +10 '
como un número, la segunda no lo hará.
Si su espere que el usuario normalmente ingrese un entero, use la primera forma. Es más fácil (y más rápido) pedir perdón en lugar de pedir permiso en ese caso.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-10 08:54:13
Si quieres comprobar lo que es:
>>>isinstance(1,str)
False
>>>isinstance('stuff',str)
True
>>>isinstance(1,int)
True
>>>isinstance('stuff',int)
False
Si desea obtener ints de raw_input
>>>x=raw_input('enter thing:')
enter thing: 3
>>>try: x = int(x)
except: pass
>>>isinstance(x,int)
True
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-05-10 18:11:43
El isdigit
el método del tipo str
devuelve True
si la cadena dada no es más que uno o más dígitos. Si no lo es, sabes que la cadena debe ser tratada como solo una cadena.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-05-10 18:08:53
No compruebes. Sigue adelante y asume que es la entrada correcta, y captura una excepción si no lo es.
intresult = None
while intresult is None:
input = raw_input()
try: intresult = int(input)
except ValueError: pass
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-05-10 18:12:54
Dependiendo de su definición de shortly, puede usar una de las siguientes opciones:
try: int(your_input); except ValueError: # ...
your_input.isdigit()
- use una expresión regular
- uso
parse
que es una especie de lo contrario deformat
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:02:47