¿Cómo verificar si una variable es un número entero o una cadena?

Tengo una aplicación que tiene un par de comandos. Cuando escribe un comando determinado, tiene que escribir información adicional sobre algo / alguien. Ahora esa información debe ser estrictamente un entero o una cadena, dependiendo de la situación.

Sin embargo, todo lo que escriba en Python usando raw_input () en realidad es una cadena, sin importar qué, más específicamente, ¿cómo lo haría en breve y sin intentarlo … excepto para ver si una variable está hecha de dígitos o caracteres?

En mi opinión tienes dos opciones:

  • Solo intente convertirlo en un int , pero detecte 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.

  • Pruebe explícitamente si solo hay dígitos en la cadena:

     value.isdigit() 

    str.isdigit() devuelve True solo si todos los caracteres de la cadena son dígitos ( 09 ).

    El equivalente de tipo str unicode / Python 3 es unicode.isdecimal() / str.isdecimal() ; solo los decimales Unicode se pueden convertir en enteros, ya que no todos los dígitos tienen un valor entero real ( U + 00B2 SUPERSCRIPT 2 es un dígito, pero no un decimal, por ejemplo).

    A menudo, esto se denomina enfoque de Permiso de solicitud 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 están permitidos en los valores int() . La primera forma aceptará felizmente ' +10 ' como un número, esta última no.

Si espera que el usuario ingrese normalmente un número 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.

Si quieres comprobar qué es:

 >>>isinstance(1,str) False >>>isinstance('stuff',str) True >>>isinstance(1,int) True >>>isinstance('stuff',int) False 

Si quieres obtener ints de raw_input

 >>>x=raw_input('enter thing:') enter thing: 3 >>>try: x = int(x) except: pass >>>isinstance(x,int) True 

El método isdigit del tipo str devuelve True si la cadena dada no es más que uno o más dígitos. Si no es así, sabes que la cadena debe tratarse como una simple cadena.

Dependiendo de su definición de breve, podría usar una de las siguientes opciones:

  • try: int(your_input); except ValueError: # ...
  • your_input.isdigit()
  • usar un regex
  • usar parse que es algo opuesto al format

No comprobar Continúe y suponga que es la entrada correcta, y detecte una excepción si no lo es.

 intresult = None while intresult is None: input = raw_input() try: intresult = int(input) except ValueError: pass