Ejecución secuencial de scripts de Python dentro de otro script con control de errores

Muchas veces es necesario ejecutar una serie de scripts de forma secuencial por lo que crear un script maestro o script de automatización que ejecute todos nuestros scripts en el orden deseado es una buena opción. De esta forma, es fácil también implementar un control de errores dentro de nuestro script que nos avise en caso de error en la ejecución de alguno de ellos. Así que vamos a ver cómo se realiza esta operación de forma sencilla.

01. La función exec()

La función exec() en Python sirve para recibir como parámetro una cadena que será interpretada como código Python. Así que usaremos esta función para ejecutar nuestros scripts. La forma de expresarlo es la siguiente:

 exec(open("codigo01.py").read())

De está forma, al ejecutar esta línea en nuestro script de ejecutará el script ‘codigo01.py’ que debe estar (cómo es lógico) en el directorio de trabajo. Existen otras dos funciones en Python, que son compile() y eval() que, aunque similares, producen resultados algo diferentes entre ellas.

02. try-except para control de errores

Una vez visto cómo ejecutar nuestros scripts embebidos, para el control de errores usaremos la forma try-except. El funcionamiento es muy sencillo:

try:
  print(x)
except:
  print("Ha ocurrido un error")

Pero, ¿qué ocurre si queremos además ejecutar un bloque en caso de que el try no haya generado ningún error? En ese caso utilizaremos un else:

try:
  print("Prueba")
except:
  print("Ha ocurrido un error")
else:
  print("Ejecución correcta")

03. Ejecución secuencial de scripts con control de errores

Una vez vista la función exec() y el try-except de Python la implementación es sencilla. Para el ejemplo, ejecutaremos secuencialmente tres scripts con control de errores:

# Script 01
try:
  exec(open("codigo01.py").read())
except:
  print("Ha ocurrido un error en codigo01")
else:
  print("Ejecución correcta de codigo01")

# Script 02
try:
  exec(open("codigo02.py").read())
except:
  print("Ha ocurrido un error en codigo02")
else:
  print("Ejecución correcta de codigo02")

# Script 03
try:
  exec(open("codigo03.py").read())
except:
  print("Ha ocurrido un error en codigo03")
else:
  print("Ejecución correcta de codigo03")

Hay que tener en cuenta que, en caso de fallo de un script, el código seguirá, ejecutando el siguiente. Si quisiéramos evitar esto, añadiríamos un break en la ejecución de cada except.

Para saber más:
Run a python script from another python script, passing in args
Errors and Exceptions
Python break and continue
¿Cuál es la diferencia entre exec,eval y compile en python 3?

Deja una respuesta