Python: compruebe si la variable es un número

En este tutorial, repasaremos tres ejemplos de cómo verificar si una variable es un número en Python. Estas son la función type(), el módulo de números y el enfoque try-catch.

Introducción

En este artículo, veremos algunos ejemplos de cómo verificar si una variable es un número en Python.

Python se escribe dinámicamente. No hay necesidad de declarar un tipo de variable, al instanciarlo; el intérprete infiere el tipo en tiempo de ejecución:

1
2
variable = 4
another_variable = 'hello'

Además, una variable se puede reasignar a un nuevo tipo en cualquier momento:

1
2
3
4
5
# Assign a numeric value
variable = 4

# Reassign a string value
variable = 'four'

Este enfoque, si bien tiene ventajas, también nos presenta algunos problemas. Es decir, cuando recibimos una variable, normalmente no sabemos de qué tipo es. Si esperamos un Número, pero recibimos una variable, querremos verificar si es un número antes de trabajar con él.

Usando la función type()

La función type() en Python devuelve el tipo de argumento que le pasamos, por lo que es una función útil para este propósito:

1
2
3
4
5
6
7
8
myNumber = 1
print(type(myNumber))

myFloat = 1.0
print(type(myFloat))

myString = 's'
print(type(myString))

Esto resulta en:

1
2
3
<class 'int'>
<class 'float'>
<class 'str'>

Por lo tanto, una forma de verificar el tipo es:

1
2
3
4
5
myVariable = input('Enter a number')
if type(myVariable) == int or type(myVariable) == float:
    # Do something
else:
    print('The variable is not a number')

Aquí, comprobamos si el tipo de variable introducido por el usuario es int o float, procediendo con el programa si lo es. De lo contrario, notificamos al usuario que ingresó una variable que no es un número. Tenga en cuenta que si está comparando varios tipos, como int o float, debe usar la función type() en ambas ocasiones.

Si solo dijéramos if type(var) == int or float, lo cual aparentemente está bien, surgiría un problema:

1
2
3
4
5
myVariable = 'A string'
if type(myVariable) == int or float:
    print('The variable a number')
else:
    print('The variable is not a number')

Esto, independientemente de la entrada, devuelve:

1
The variable is a number

Esto se debe a que Python comprueba los valores de verdad de las declaraciones. Las variables en Python se pueden evaluar como Verdadero excepto Falso, Ninguno, 0 y contenedores vacíos como [], {}, set(), (), ' ' o "".

Por lo tanto, cuando escribimos o flotar en nuestra condición si, es equivalente a escribir o Verdadero que siempre se evaluará como Verdadero.

números.Número

Una buena forma de verificar si una variable es un número es el módulo numbers. Puedes comprobar si la variable es una instancia de la clase Number, con la función isinstance():

1
2
3
4
import numbers

variable = 5
print(isinstance(5, numbers.Number))

Esto dará como resultado:

1
True

Nota: Este enfoque puede comportarse de manera inesperada con tipos numéricos fuera del núcleo de Python. Ciertos marcos pueden tener una implementación numérica que no sea Number, en cuyo caso este enfoque devolverá falsamente False.

Usando un bloque try-except

Otro método para verificar si una variable es un número es usar un bloque try-except. En el bloque try, convertimos la variable dada en un int o float. La ejecución exitosa del bloque try significa que una variable es un número, es decir, int o float:

1
2
3
4
5
6
myVariable = 1
try:
    tmp = int(myVariable)
    print('The variable a number')
except:
    print('The variable is not a number')

Esto funciona tanto para int como para float porque puedes convertir int en float y float en int.

Si específicamente solo desea verificar si una variable es una de estas, debe usar la función type ().

Conclusión

Python es un lenguaje de tipo dinámico, lo que significa que podríamos recibir un tipo de datos diferente al que estamos esperando.

En los casos en los que querríamos aplicar tipos de datos, vale la pena verificar si una variable es del tipo deseado. En este artículo, hemos cubierto tres formas de comprobar si una variable es un número en Python.

Licensed under CC BY-NC-SA 4.0