О ловле ЛЮБОГО исключения

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

Ответ 1

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

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

Ответ 2

Помимо оголенного предложения 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: если вы поймали и проглотили их, тогда вы могли бы сделать это трудно любой, кто выйдет из script.

Ответ 3

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

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

Ответ 4

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

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) "Исключение было выброшено!" или "Все выглядит великолепно!" в зависимости от того, было ли исключено исключение.

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

Ответ 5

Чтобы уловить все возможные исключения, поймайте 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))

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

Ответ 6

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

try:
    raise IndexError #as test error
except Exception as e:
    excepName = type(e).__name__ # returns the name of the exception

Ответ 7

try:
    whatever()
except:
    # this will catch any exception or error

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

Ответ 8

Есть несколько способов сделать это, в частности, с Python 3.0 и выше

Подход 1

Это простой подход, но не рекомендуется, потому что вы не знаете точно, какая строка кода вызывает исключение:

def bad_method():
    try:
        sqrt = 0**-1
    except Exception as e:
        print(e)

bad_method()

Подход 2

Этот подход рекомендуется, потому что он предоставляет более подробную информацию о каждом исключении. Это включает:

  • Номер строки для вашего кода
  • Имя файла
  • Фактическая ошибка более многословно

Единственным недостатком является необходимость импорта tracback.

import traceback

def bad_method():
    try:
        sqrt = 0**-1
    except Exception:
        print(traceback.print_exc())

bad_method()