Основы питон. #инструкция объявляющая переменную var и присваивающая ей значение равное 5
Скачать 92.15 Kb.
|
ИсключенияИсключения – это объекты, которые выводятся на экран как строка с текстом сообщения. Обычно они вызываются функциями и методами при возникновении ошибок или других важных событий при выполнении программы. В предыдущем разделе мы ловили ошибку с помощью assert. Данная функция вызывала исключение: Traceback (most recent call last): File "solve.py", line 11, in print(solve(123)) File "solve.py", line 3, in solve assert type(s) == list AssertionError Существует множество видов исключений, вот только некоторые из них: BaseException - базовое исключение, порождающее все остальные SystemExit - системное исключение, порождаемое функцией sys.exit при выходе из программы KeyboardInterrupt - системное исключение, порождаемое пользовательским выходом из программы с помощью сочетания клавиш ArithmeticError - арифметическая ошибка AssertionError - выражение assert ложно ImportError - ошибка импорта модуля или его атрибута IndexError - индекс не входит в диапазон элементов NameError - не найдено переменных с таким именем SyntaxError - ошибка синтаксиса TypeError - операция к объекту несоответствующего типа и т.д. Исключения позволяют понять какого рода ошибки возникают при выполнении программ. Иногда необходимо отловить ошибку конкретного вида или пропустить ее, не обращая внимания. Для этого существуют обработчики исключений. Конструкция try...exceptКонструкция try ... except позволяет перехватывать исключения, полный синтаксис выглядит следующим образом: try: try_suite except exception_group1 as variable1: except_suite1 ... except exception_groupN as variableN: except_suiteN else: else_suite finally: finally_suite Минимально необходимая конструкция должна состоять из операторов try и except. Все остальные операторы являются необязательными. После оператора try записывается вложенная инструкция того, что должна выполнить программа. В случае успешного выполнения, выполнится инструкция после оператора else, если такой есть в программе. Если присутствует оператор finally, тогда вложенная в него инструкция выполняется всегда и в последнюю очередь. Если во время выполнения инструкции try_suite возникает исключение, то оно проверяется на соответствие операторами except. Exception_group может быть как единственным видом исключений, так и кортежем нескольких. Приставка as variable1 является необязательной и служит для записи исключения в переменную variable1, чтобы затем к нему можно было обратиться в инструкции except_suite1. Инструкция except_suite1 будет выполняться, когда при выполнении try_suite возникнет исключение, соответствующее exception_group1. При работе с исключениями необходимо помнить, что существует определенная иерархия в структуре исключений: Фрагмент структуры исключений При отлове конкретных ошибок необходимо указывать их вид в первую очередь, т.е.: try: try_suite except IndexError: except_suite1 except Exception: except_suite2 В данном примере нам необходимо отловить ошибку индекса и выполнить соответствующее действие, а при возникновении любой другой - иное действие. В таком случае, исходя из структуры исключений, мы должны прописать конкретный вид исключения выше, чем более общий. Потому, что при возникновении IndexError, инструкция except_suite2 будет также исполнена, т.к. IndexError является частью вида Exception. И, если, нам необходимо, чтобы except_suite1 выполнился раньше except_suite2, то мы указываем более частный вид исключения. Исключения могут быть полезными, однако есть и несколько недостатков применения исключений. Например, они используются, когда природа ошибки заранее известна, а это частный случай. Гораздо важнее, если бы программа могла сигнализировать о заранее неизвестной ошибке. Помимо этого, бывает невозможно определить какая строка кода будет выполняться после перехвата исключения. В любом случае, перехват исключений не является необходимым инструментом при написании кода, каждый может применять его на свое усмотрение. |