Те части программы на языке Python, в которых возможно появление ошибок, например работающие с пользовательским вводом, разрешается заключать в специальные блоки try-except, с помощью которых можно обрабатывать «исключительные ситуации». Инструкции, которые способны вызвать ошибки при выполнении, группируются в блок try, а те команды, которым предстоит обрабатывать эти ошибки, — в последующий блок except. После него может стоять необязательный блок finally, где содержатся инструкции, выполняющиеся после того, как все исключения будут обработаны.

В языке Python встречается много различных типов встроенных исключений, таких как, например, NameError, которые происходят, если имя переменной не найдено; исключение IndexError, вызываемое при попытке обращения к несуществующему индексу элемента списка; а также ValueError, которое появляется, когда во встроенную операцию или

функцию передается аргумент, имеющий несоответствующее значение.

Каждое исключение возвращает сообщение с описательной информацией, которое можно использовать, присвоив его какой-нибудь переменной с помощью ключевого слова as, чтобы отобразить природу происхождения этого исключения.

Пример:

title = 'Какой-то заголовок'
try:
  print(titel)
except NameError as msg:
  print(msg)

#Результат выполнения: name 'titel' is not defined

Рассмотрим пример закрытия приложения при возникновении исключения. Для этого нам нужны 2 скрипта, с обработкой исключения и без.

Скрипт без обработки исключения:

while True:
    inp = input("Введите число или 'q' для выхода: ")
    if inp == 'q':
       break
    inp = float(inp)
    print(inp / 2)    

Скрипт с обработкой исключения:

while True:
    inp = input("Введите число или 'q' для выхода: ")
    if inp == 'q':
       break
    try:
       inp = float(inp)
    except ValueError:
       print("Ошибка ввода!")
    else:    
       print(inp / 2)        


bat-файлы для запуска этих приложений:

run_python_exception.bat

C:\Users\1\AppData\Local\Programs\Python\Python35-32\python.exe python_exception.py %*

run_python_exception_safe.bat

C:\Users\1\AppData\Local\Programs\Python\Python35-32\python.exe python_exception_safe.py %*

Если запустить скрипт без обработки исключения, то при возникновении исключения (в данном случае при вводе буквенных значений) приложение закроется. А скрипт, обрабатывающий исключение не закроется. Такое поведение приложения является более дружелюбным по отношению к пользователю.

Можно обрабатывать множественные исключения, для этого внутри блока except в скобках нужно указать через запятую типы этих исключений:

except (NameError, IndexError) as msg:
print(msg)

Вы можете также создавать пользовательские типы исключений. Для этого используется ключевое слово raise, после которого указывается тип исключения и описательное сообщение, придуманное пользователем.

day = 32
try:
    if day > 31:
        raise ValueError('Неправильный номер дня')
        # Сюда добавляем операторы.
except ValueError as msg:
    print('Программа нашла ошибку:' , msg)
finally:
    print('Конец обработки исключений.')

"""
Результат выполнения:
Программа нашла ошибку: Неправильный номер дня
Конец обработки исключений.
"""