Assert en Python
A continuación te explicamos como hacer uso del assert
en Python, pero te recomendamos que antes leas otros de nuestros posts sobre excepciones y el uso de try
, except
y finally
.
Un assert
se podría traducir en Español como una comprobación. Se trata por lo tanto de la verificación de una condición determinada, que de no ser cierta, lanzará la excepción AssertionError
. Veamos un ejemplo.
assert(1==2)
# Se lanza la excepción AssertionError
Es decir, si el contenido existente dentro del assert
es igual a False
, se lanzará la excepción. Se podría conseguir el mismo resultado haciendo lo siguiente. Pero el uso de assert()
resulta más cómodo.
if condicion:
raise AssertionError()
Podemos también añadir un texto con información relevante acerca del assert()
.
assert False, "El assert falló"
También se puede hacer uso del assert()
sin usar paréntesis como se muestra a continuación.
x = "CursosPython"
assert x == "CursosPython"
assert() en testing
La función assert()
puede ser también muy útil para escribir tests unitarios o units tests. Veamos un ejemplo.
Imagínate que tienes una función calcula_media()
que como su nombre indica calcula la media de un conjunto de números.
def calcula_media(lista):
return sum(lista)/len(lista)
En el mundo de la programación es muy importante probar o testear el software, para asegurarse de que está libre de errores. Gracias al uso de assert()
podemos realizar estas comprobaciones de manera automática.
assert(calcula_media([5, 10, 7.5]) == 7.5)
assert(calcula_media([4, 8]) == 6)
Por lo que si hacemos que estas comprobaciones sean parte de nuestro código, podríamos proteger nuestra función, asegurándonos de que nadie la “rompa”.
assert() en funciones
Puede resultar útil usar assert()
cuando queremos realizar alguna comprobación, como podría ser dentro de una función. En el siguiente ejemplo tenemos una función suma()
que sólo suma las variables si son números enteros.
# Funcion suma de variables enteras
def suma(a, b):
assert(type(a) == int)
assert(type(b) == int)
return a+b
# Error, ya que las variables no son int
suma(3.0, 5.0)
# Ok, los argumentos son int
suma(3, 5)
assert() con clases
Otro ejemplo podría verificar que un objeto pertenece a una clase determinada.
class MiClase():
pass
class MiOtraClase():
pass
mi_objeto = MiClase()
mi_otro_objeto = MiOtraClase()
# Ok
assert(isinstance(mi_objeto, MiClase))
# Ok
assert(isinstance(mi_otro_objeto, MiOtraClase))
# Error, mi_objeto no pertenece a MiOtraClase
assert(isinstance(mi_objeto, MiOtraClase))
# Error, mi_otro_objeto no pertenece a MiClase
assert(isinstance(mi_otro_objeto, MiClase))