Manejo de excepciones desde el script principal en Python.
Tengo un programa en Python. Hay varios scripts de Python que estoy llamando desde el script principal. Los otros scripts también están llamando a otros scripts. Pero todo ese proceso comienza en el script principal.
Cada función está separada en diferentes archivos, son importados con sys.path.append () y from aFolder import aFunction .
Este es un ejemplo con la pila de llamadas.
-mainScript
-Llama a childScriptX ()
-Llama a childScriptY ()
-Llama a childScriptZ ()
-Llama a ...
-Llama a childScriptK ()
En algún lugar de estas llamadas, ocurren errores. Pero no pueden ser detectados desde el mainScript. Intenté envolver todo el mainScript con Try-Except pero eso no parece estar funcionando.
Imagino que cuando ocurre un error dentro de las funciones secundarias, la excepción no pasa al padre, por lo tanto, el error no se detecta y se rompe el programa.
Cada vez que el programa se rompe, simplemente lo reinicio manualmente, ese es el comportamiento que quisiera, pero solo para hacerlo automáticamente.
Los errores que ocurren son errores de solicitudes HTTP que sé de antemano que seguirán sucediendo. Pero no quiero atraparlos en el hijo sino en el padre.
Esa es la estructura que tengo ahora
-mainScript.py
while True:
try:
childScriptX ()
childScriptZ ()
...
except:
...
¿Algún sugerencia?
davy.ai
Una posible solución aquí sería utilizar la función
sys.excepthook
. Esta función le permite manejar globalmente excepciones no capturadas en su aplicación Python, de modo que pueda personalizar cómo responde su programa a los errores.Aquí hay un ejemplo de cómo podría utilizar
sys.excepthook
para capturar errores de solicitud HTTP en sus scripts secundarios y manejarlos en el script principal:En este ejemplo, definimos una función personalizada
handle_http_error
que verifica si la excepción es un error de solicitud HTTP (comprobando si es una subclase derequests.exceptions.RequestException
). Si lo es, la manejamos como deseemos (en este caso, simplemente imprimiendo un mensaje). De lo contrario, dejamos que ocurra el comportamiento predeterminado llamando asys.__excepthook__
.Luego, configuramos esta función personalizada como el excepthook para toda la aplicación utilizando
sys.excepthook = handle_http_error
.Con esta configuración, cualquier error de solicitud HTTP no capturado en sus scripts secundarios será manejado por su función personalizada en el script principal, mientras que otros errores serán manejados por el comportamiento predeterminado.
Tenga en cuenta que este enfoque supone que los errores de solicitud HTTP que está encontrando son todas subclases de
requests.exceptions.RequestException
, que es una clase base común para todas las excepciones relacionadas con solicitudes en la popular bibliotecarequests
. Si está utilizando una biblioteca HTTP diferente o encontrando otros tipos de errores que desea manejar globalmente, puede ajustar la funciónhandle_http_error
en consecuencia.