How not to stop the execution of other function in python in case of Exception/Error

前端 未结 3 1475
不思量自难忘°
不思量自难忘° 2020-12-11 10:17

I have a script in python which works as shown below. Each function performs a completely different task and not related to each other. My problem is if function2()<

相关标签:
3条回答
  • 2020-12-11 10:28

    You can use exception and catch all sort of exceptions like this

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

    for large number of functions you can use

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

    thus you can iterate over the keys of the dictionary for the function and iterate on the parameters

    0 讨论(0)
  • 2020-12-11 10:38

    No need to write multiple try/except. Create a list of your function and execute them. For example, you code should be like:

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

    OR, create a decorator and add that decorator to each of your function. Check A guide to Python's function decorators. For example, your decorator should be like:

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

    Now add this decorator with your function definition as:

    @wrap_error
    def function1():
        some code
    

    Functions having this decorator added to them won't raise any Exception

    0 讨论(0)
  • 2020-12-11 10:39

    As of Python 3.4, a new context manager as contextlib.suppress is added which as per the doc:

    Return a context manager that suppresses any of the specified exceptions if they occur in the body of a with statement and then resumes execution with the first statement following the end of the with statement.

    In order to suppress all the exceptions, you may use it as:

    from contextlib import suppress
    
    if __name__ == '__main__':
        with suppress(Exception):  # `Exception` to suppress all the exceptions
            function1()
            function2()
            # Anything else you want to suppress
    
    0 讨论(0)
提交回复
热议问题