Cómo no detener la ejecución de otra función en Python en caso de Excepción / Error

Tengo un script en python que funciona como se muestra a continuación. Cada función realiza una tarea completamente diferente y no relacionada entre sí. Mi problema es que si function2 () tiene un problema durante el proceso de ejecución, function3 () , function4 () , function5 () no se ejecutará. Sé que dirá que debe manejar esto capturando la excepción (intente … excepto) pero luego tengo que detectar todas las excepciones que no estoy buscando. En pocas palabras, ¿cómo puedo codificar dónde no se ven afectadas mis otras funciones si alguna de las funciones tiene problemas? Idealmente, debería excluir esa función problemática y dejar que la otra función se ejecute.

def function1(): some code def function2(): some code def function3(): some code def function4(): some code def function5(): some code if __name__ == '__main__': function1() function2() function3() function4() function5() 

No hay necesidad de escribir múltiples try/except . Crea una lista de tus funciones y ejecútalas. Por ejemplo, tu código debería ser como:

 if __name__ == '__main__': func_list = [function1, function2, function3, function4, function5] for my_func in func_list: try: my_func() except: pass 

O, crea un decorador y agrega ese decorador a cada una de tus funciones. Consulte una guía para los decoradores de funciones de Python . Por ejemplo, tu decorador debería ser como:

 def wrap_error(func): def func_wrapper(*args, **kwargs): try: return func(*args, **kwargs) except: pass return func_wrapper 

Ahora agregue este decorador con su definición de función como:

 @wrap_error def function1(): some code 

Las funciones que tengan este decorador agregado no generarán ninguna Exception

Puedes usar la excepción y atrapar todo tipo de excepciones como esta

 if __name__ == '__main__': try: function1() except: pass try: function2() except: pass try: function3() except: pass try: function4() except: pass 

para un gran número de funciones que puede utilizar

 func_dict = { func1 : { param1 : val param2 : val }, func1 : { param1 : val param2 : val } } 

por lo tanto, puede iterar sobre las teclas del diccionario para la función e iterar sobre los parámetros

A partir de Python 3.4, se agrega un nuevo administrador de contexto como contextlib.suppress que, según el documento:

Devuelva un administrador de contexto que suprima cualquiera de las excepciones especificadas si ocurren en el cuerpo de una sentencia with y luego reanuda la ejecución con la primera sentencia después del final de la sentencia with.

Para suprimir todas las excepciones, puede usarlo como:

 from contextlib import suppress if __name__ == '__main__': with suppress(Exception): # `Exception` to suppress all the exceptions function1() function2() # Anything else you want to suppress