Python: об улавливании любого исключения

Как я могу написать блок try / except который ловит все исключения?

7 Solutions collect form web for “Python: об улавливании любого исключения”

Вы можете, но не должны:

 try: do_something() except: print "Caught it!" 

Однако, это также поймает исключения, такие как KeyboardInterrupt и вы обычно этого не хотите, не так ли? Если вы не сразу воссоздаете исключение – см. Следующий пример из документов :

 try: f = open('myfile.txt') s = f.readline() i = int(s.strip()) except IOError as (errno, strerror): print "I/O error({0}): {1}".format(errno, strerror) except ValueError: print "Could not convert data to an integer." except: print "Unexpected error:", sys.exc_info()[0] raise 

Помимо голого, except: (которое, как говорили другие, вы не должны использовать), вы можете просто перехватить Exception :

 import traceback import logging try: whatever() except Exception as e: logging.error(traceback.format_exc()) # Logs the error appropriately. 

Обычно вы когда-либо рассматривали возможность делать это на самом внешнем уровне вашего кода, если, например, вы хотели обработать любые иначе неперехваченные исключения до завершения.

Преимущество, за except Exception над голым, except , что есть несколько исключений, которые он обычно не поймает, наиболее очевидно KeyboardInterrupt и SystemExit : если вы поймали и проглотили их, тогда вы могли бы заставить кого-либо выйти из вашего скрипта.

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

 try: a = 2/0 except Exception as e: print e.__doc__ print e.message 

Очень простой пример, аналогичный приведенному здесь:

http://docs.python.org/tutorial/errors.html#defining-clean-up-actions

Если вы пытаетесь поймать ВСЕ исключения, тогда поместите весь свой код в оператор «try:» вместо «print» Выполнение действия, которое может вызвать исключение. ».

 try: print "Performing an action which may throw an exception." except Exception, error: print "An exception was thrown!" print str(error) else: print "Everything looks great!" finally: print "Finally is called directly after executing the try statement whether an exception is thrown or not." 

В приведенном выше примере вы увидите вывод в следующем порядке:

1) Выполнение действия, которое может вызвать исключение.

2) Наконец, вызывается сразу после выполнения инструкции try, выбрано ли исключение или нет.

3) «Исключение было выброшено!» или «Все выглядит великолепно!» в зависимости от того, было ли исключено исключение.

Надеюсь это поможет!

Чтобы поймать все возможные исключения, перехватите BaseException . Он находится поверх иерархии Exception:

Python 3: https://docs.python.org/3.5/library/exceptions.html#exception-hierarchy

Python 2.7: https://docs.python.org/2.7/library/exceptions.html#exception-hierarchy

 try: something() except BaseException as error: print('An exception occurred: {}'.format(error)) 

Но, как говорили другие люди, вы обычно не должны этого делать, если у вас нет веской причины.

Я только что узнал этот маленький трюк для тестирования, если имена исключений в Python 2.7. Иногда я обрабатывал определенные исключения в коде, поэтому мне нужен был тест, чтобы узнать, включено ли это имя в список обработанных исключений.

 try: raise IndexError #as test error except Exception as e: excepName = type(e).__name__ # returns the name of the exception 
 try: whatever() except: # this will catch any exception or error 

Стоит отметить, что это не правильное кодирование Python. Это поймает и многие ошибки, которые вы, возможно, не захотите поймать.

  • Можно ли прочитать файл с S3 в Google App Engine с помощью boto?
  • «Непоследовательное использование вкладок и пробелов в отступе»
  • Какая версия BeautifulSoup работает с GAE (python 2.5)?
  • Модуль Python для извлечения вероятных дат из строк?
  • eval call lambda не видит себя
  • Каков наиболее эффективный способ поиска вложенных списков в python?
  • как настроить и запустить работника сельдерея на удаленной системе
  • ошибка unicode в python
  • Python - лучший язык программирования в мире.