Введение в исключительные ситуации в Python
В этом разделе будут рассматриваться исключительные ситуации в Python. Для начала нужно разобраться, что они из себя представляют.
При написании какой-либо программы, разработчик неявно рассчитывает на то, что все используемые программно-технические механизмы будут работать корректно.
Это, однако, не всегда так. При передаче данных по сети происходит обрыв связи и данные приходят к нам в некорректном виде, или вообще не приходят. При записи файла оказывается, что выделенное нам место на жестком диске закончилось, и файл не может записаться. При чтении файла оказывается, что такого файла не существует и нам не откуда читать. При печати данных на принтере происходит обрыв кабеля, соединяющего принтер и компьютер.
Все описанные ситуации имеют общую суть: происходит некий сбой, который приводит к невозможности или бессмысленности завершения запланированной операции.
Бывают также ситуации, в которой происходит некая ошибка, не являющаяся сбоем. Например, вы спрашиваете у пользователя его email, и он вводит email в некорректном формате. Понятно, что наша программа не может продолжить обрабатывать email, так как он не корректен. Но, тем не менее это - не исключительная ситуация. Наша программа может сама исправить ситуацию: она выведет сообщение об ошибке и пользователь повторит свой ввод.
На самом деле разница между сбоем и не сбоем весьма расплывчата. Событие, которое одна программа может трактовать как исключительную ситуацию, другая программа может трактовать как некую ошибку, с которой она может справится.
Критерий тут следующий: если при возникновении проблемы ваша программа может продолжать выполнять то, для чего она предназначена, то это не исключительная ситуация, а если не может - то да, это исключение.
Например, у нас есть программа, которая должна спросить email пользователя. Если пользователь ввел email в некорректном формате - это не сбой. Это ожидаемая проблема и наша программа будет спрашивать у пользователя email столько раз, пока он не введет его корректно.
Пусть наша программа, которая спрашивает email, должна также отправить этот корректный email через интернет. При этом оказывается, что интернет не работает. Вот это уже проблема: программа никак не сможет отправить данные через интернет, если интернет не работает. Программа, тем не менее, может продолжить свое выполнение: она может вывести информацию о проблеме, повторить попытку отправки через некоторое время, и так далее. Но эти действия уже не совсем то, для чего программа была предназначена, так как основное действие - отправка email программа сделать не сможет.
Исходя из чего, очень часто трактовка какое поведение будет считаться нормальным, а какое исключительным зависит от задач, стоящих перед программистом.