Comprobando Excepciones en Python Usando doctest
Al escribir código en Python, a menudo necesitamos asegurarnos de que nuestras funciones se comporten como se espera, especialmente en lo que respecta al manejo de errores. Un escenario común es probar si una función lanza una excepción bajo ciertas condiciones. Si usas el módulo doctest
de Python para realizar tus pruebas, puedes preguntarte: ¿Puedo verificar que se lanza una excepción con doctest
? La respuesta es un rotundo sí. Vamos a explorar cómo utilizar doctest
para verificar excepciones en tus funciones de Python.
El Problema: Probar Excepciones
Considera una función llamada foo(x)
. Esta función está diseñada para lanzar una excepción si su argumento es menor que cero. La pregunta central aquí es cómo escribir un doctest
que confirme que la función se comporta correctamente en este escenario. Específicamente, cuando pasamos un valor menor que cero, queremos asegurarnos de que se lance una excepción para indicar que algo salió mal.
Ejemplo de Función
Aquí hay una versión simple de la función foo(x)
:
def foo(x):
if x < 0:
raise ValueError("x debe ser no negativo")
return x
La Solución: Escribir un doctest
Para crear un doctest
que verifique excepciones, utilizaremos el siguiente enfoque. En nuestro doctest
, podemos especificar que esperamos que se lance una excepción al llamar a foo()
con un valor que debería desencadenar el error. Aquí está cómo hacerlo paso a paso:
Paso 1: Escribir el Doctest
En el docstring de tu función, puedes añadir un caso de prueba que demuestre la excepción esperada. Así es como se ve:
def foo(x):
"""
Devuelve x si es no negativo.
Lanza:
ValueError: Si x < 0.
Ejemplos:
>>> foo(-1)
Traceback (llamada más reciente de último):
...
ValueError: x debe ser no negativo
>>> foo(3)
3
"""
if x < 0:
raise ValueError("x debe ser no negativo")
return x
Paso 2: Ejecutar el Doctest
Para ejecutar el doctest
, incluye el siguiente fragmento al final de tu script de Python:
if __name__ == "__main__":
import doctest
doctest.testmod()
Paso 3: Salida Esperada
Cuando ejecutes el script, doctest
procesará los ejemplos en el docstring. Si todo funciona correctamente, no verás ninguna salida (indicando que todas las pruebas pasaron). Si la excepción no se lanza como se esperaba, doctest
informará un error.
Recursos Adicionales
Para obtener más información sobre cómo utilizar efectivamente doctest
en tus módulos, consulta la documentación oficial del módulo doctest.
Conclusión
Usar doctest
para verificar que las excepciones se lanzan correctamente no solo es posible; ¡es sencillo! Al añadir unas pocas líneas en el docstring de tu función, puedes documentar y probar efectivamente el comportamiento de tu código, asegurando que se adhiere a los patrones esperados. Ya sea que estés escribiendo nuevas funciones o probando existentes, doctest
ofrece una poderosa manera de incluir pruebas impulsadas por ejemplos directamente junto a tu código. ¡Disfruta haciendo que tu código sea robusto, y feliz codificación!