Исключение это ситуации, когда что-то идет не так, обычно из-за ошибок в коде или неправильного ввода. Когда происходит исключение, программа немедленно останавливается.
В следующем коде происходит исключение ZeroDivisionError при попытке разделить 7 на 0.

num1 = 7
num2 = 0
print(num1/num2)

Исключения могут происходить по разным причинам.
Наиболее частые исключения:
ImportError: импортирование не удалось;
IndexError: индекс не входит в диапазон элементов списка;
NameError: попытка использовать несуществующую переменную;
SyntaxError: ошибка разбора кода;
TypeError: в функцию передано значение несовместимого типа;
ValueError: в функцию передано значение совместимого типа, но с некорректным значением.

Когда происходит исключение, чтобы обойти его и выполнить код, вы можете использовать инструкцию try/except.
Блок try содержит код под сомнением, код который может вызвать исключение. В случае исключения выполнение кода в блоке try прерывается и передается коду в блоке except. Если не происходит никакой ошибки, код в блоке except не выполняется.

try:
num1 = 7
num2 = 0
print (num1 / num2)
print(“Done calculation”)
except ZeroDivisionError:
print(“An error occurred”)
print(“due to zero division”)

Инструкция try может иметь несколько различных блоков except, чтобы обрабатывать различные исключения.
Блок except может содержать несколько исключений, которые указываются в круглых скобках; все они будут выполнены программой.

try:
variable = 10
print(variable + “hello”)
print(variable / 2)
except ZeroDivisionError:
print(“Divided by zero”)
except (ValueError, TypeError):
print(“Error occurred”)

Когда нужно, чтобы некоторый фрагмент кода выполнялся, независимо от того, возникают ошибки или нет, используйте инструкцию finally. Инструкция finally располагается в нижней части инструкции try/except. Инструкция finally выполняется всегда после выполнения блока try и, возможно, после блока except.

try:
print(“Hello”)
print(1 / 0)
except ZeroDivisionError:
print(“Divided by zero”)
finally:
print(“This code will run no matter what”)

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

try:
print(1)
print(10 / 0)
except ZeroDivisionError:
print(unknown_var)
finally:
print(“This is executed last”)

Вы можете вызывать исключения с помощью инструкции raise.

print(1)
raise ValueError
print(2)

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

name = “123”
raise NameError(“Invalid name!”)

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

try:
num = 5 / 0
except:
print(“An error occurred”)
raise