Un AssertionError se lanza cuando la condición de una sentencia assert se evalúa como False. Las sentencias assert están pensadas para verificaciones internas de cordura durante el desarrollo, no para validar entradas en código de producción. Pueden deshabilitarse globalmente ejecutando Python con el flag -O.
Por qué ocurre
- •Una condición assert que falla porque el programa alcanzó un estado inesperado.
- •Usar assert para validar entradas del usuario o datos externos en lugar de lanzar una excepción adecuada.
- •Una aserción de test que falla, por ejemplo en pytest cuando el valor real no coincide con el esperado.
- •Ejecutar código escrito con suposiciones que ya no se cumplen después de una refactorización.
Ejemplos
Código que causa el error
def divide(a, b):
assert b != 0, "Divisor must not be zero"
return a / b
print(divide(10, 0))Error en la terminal
Traceback (most recent call last):
File "app.py", line 5, in <module>
print(divide(10, 0))
File "app.py", line 2, in divide
assert b != 0, "Divisor must not be zero"
AssertionError: Divisor must not be zeroCómo solucionarlo
En código de producción, reemplaza assert con comprobaciones if explícitas que lancen ValueError o TypeError. Reserva assert para invariantes internas y código de tests. Cuando veas este error en tests, lee el mensaje de la aserción para entender qué valor se esperaba frente a lo que se recibió.
Código corregido
def divide(a: float, b: float) -> float:
if b == 0:
raise ValueError("Divisor must not be zero")
return a / b
try:
print(divide(10, 0))
except ValueError as e:
print(f"Error: {e}")Errores relacionados
¿Listo para practicar tu inglés en el trabajo?
Lingua-e tiene ejercicios interactivos basados en conversaciones reales de developers: standups, code reviews, retrospectivas y más. Practica hasta que salga solo.
Prueba Lingua-e gratis