Обработка разных типов исключений
@ProgHelpBotВстроенные типы исключений
После ключевого слова except может быть указано имя конкретного исключения.
try:
a = int(input())
print(a)
except ValueError:
print("ValueError")
print("End")
К базовым типам исключений относятся:
BaseException: базовый тип для всех встроенных исключений;Exception: базовый тип, который обычно применяется для создания своих типов исключений;ArithmeticError: базовый тип для исключений, связанных с арифметическими операциями (OverflowError,ZeroDivisionError,FloatingPointError);BufferError: базовый тип исключения, которое возникает при невозможности выполнить операцию с буффером;LookupError: базовый тип для исключений, которое возникают при обращении в коллекциях по некорректному ключу или индексу (например,IndexError,KeyError).
От этих классов наследуются все конкретные типы исключений. Python обладает большим списком встроенных исключений, который приведён в документации. Наиболее часто встречающиеся:
IndexError: возникает, если индекс при обращении к элементу коллекции находится вне допустимого диапазона;KeyError: возникает, если в словаре отсутствует ключ, по которому происходит обращение к элементу словаря;OverflowError: возникает, если результат арифметической операции не может быть представлен текущим числовым типом (обычно типом float);RecursionError: возникает, если превышена допустимая глубина рекурсии;TypeError: возникает, если операция или функция применяется к значению недопустимого типа;ValueError: возникает, если операция или функция получают объект корректного типа с некорректным значением;ZeroDivisionError: возникает при делении на ноль;NotImplementedError: возникает, когда какие-то методы класса нереализованны;ModuleNotFoundError: возникает при при невозможности найти модуль при его импорте директивой import;OSError: генерируется при возникновении ошибок системы (например, невозможно найти файл, память диска заполнена и т.д.).
Обработка нескольких типов исключений
Если при выполнении программы могут возникать различные типы исключений, то их можно обрабатывать по отдельности.
try:
a = int(input())
b = int(input())
print(a / b)
except ValueError:
print("ValueError")
except ZeroDivisionError:
print("ZeroDivisionError")
except BaseException:
print("BaseException")
В одном блоке except можно обрабатывать сразу несколько исключений.
try:
a = int(input())
b = int(input())
print(a / b)
except(ValueError, ZeroDivisionError):
print("Error")
Получение информации об исключении
С помощью оператора as можно передать всю информацию об исключении в переменную, которую затем можно использовать в блоке except.
try: a = int(input()) print(a) except ValueError as e: print(e)
Результат, если вводится строка Hello:
invalid literal for int() with base 10: 'Hello'