Как не останавливать выполнение другой функции в python в случае Exception / Error

У меня есть скрипт в python, который работает, как показано ниже. Каждая функция выполняет совершенно другую задачу и не связана друг с другом. Моя проблема в том, что если функция2 () имеет проблему во время выполнения процесса, то функции3 () , function4 () , function5 () не будут выполняться. Я знаю, что вы скажете, что справитесь с этим, поймав исключение (try..except), но затем я должен поймать каждое исключение, которого я не ищу. Вкратце, как код, где мои другие функции не влияют, если какая-либо из функций имеет проблемы. В идеале это должно исключить эту проблемную функцию и позволить другой функции выполнить.

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() 

  • Python не работает: ImportError: нет модуля с именем 'logging'
  • Вставка переменных MySQL с использованием Python, не работает
  • как заменить только определенные слова в файле
  • Как изменить стандартную среду python Anaconda
  • Получение сегодняшней даты в YYYY-MM-DD на Python?
  • Использовать монгольский сервер MongoDB для модульного тестирования
  • Ошибка памяти Python при повторении большого диапазона
  • Почему обновление одного словарного объекта влияет на другое?
  • 3 Solutions collect form web for “Как не останавливать выполнение другой функции в python в случае Exception / Error”

    Не нужно писать несколько try/except . Создайте список своей функции и выполните их. Например, код должен выглядеть так:

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

    ИЛИ, создайте декоратор и добавьте этот декоратор к каждой из ваших функций. Проверьте руководство к декораторам функций Python . Например, ваш декоратор должен выглядеть следующим образом:

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

    Теперь добавьте этот декоратор с определением функции как:

     @wrap_error def function1(): some code 

    Функции, имеющие этот декоратор, добавленный к ним, не вызовут никакого Exception

    Вы можете использовать исключение и улавливать всевозможные исключения, подобные этому

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

    для большого количества функций, которые вы можете использовать

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

    таким образом, вы можете перебирать ключи словаря для функции и итерации по параметрам

    Начиная с Python 3.4, добавляется новый менеджер контекста как contextlib.suppress который согласно документу:

    Верните диспетчер контекста, который подавляет любое из указанных исключений, если они встречаются в теле оператора with и затем возобновляет выполнение с первым оператором, следующим за концом инструкции with.

    Чтобы исключить все исключения, вы можете использовать его как:

     from contextlib import suppress if __name__ == '__main__': with suppress(Exception): # `Exception` to suppress all the exceptions function1() function2() # Anything else you want to suppress 
    Python - лучший язык программирования в мире.