Блок try и except применяется для перехвата возникающих
исключений, во время работы программы, в блоке try мы выполняем
инструкцию в которой может возникнуть ошибка, если ее не происходит,
то программа идет дальше, если же возникает исключение, то
исполняется блок except в котором можно определить поведение в
случае ошибки.
Делить на 0 нельзя, и в процессе работы кода возникнет ошибка,
except перехватывает это исключение и задает переменной
значение 0
try:
k = 1 / 0
except ZeroDivisionError:
k = 0
print(k)
# Вывод
# 0 Мы можем указывать какое именно исключение следует перехватывать,
отлавливая исключение мы перехватываем и всех его потомков,
например, перехватывая ArithmeticError, мы также перехватываем
FloatingPointError, OverflowError и ZeroDivisionError.
Если не указывать блоку except ничего, то он будет перехватывать
все исключения, то есть так тоже сработает:
try:
k = 1 / 0
except:
k = 0
print(k)
# Вывод
# 0 К конструкции перехвата исключений, также срабатывает блок
else и finally.
finally - Выполняет блок инструкций в любом случае, было
исключение или нет.
else - Выполняется если исключения не было.
То есть если есть блок finally то он сработает в любом случае,
если есть блок else и было исключение то все равно сработает
только блок finally ибо else работает в случае если ошибки
не было, если же есть else и finally и ошибки не было, то
с начала сработает блок else а уже потом finally.
Пример с исключением:
try:
k = 1 / 0
except ZeroDivisionError:
print('Сработало исключение ZeroDivisionError')
else:
print('Сработал блок else')
finally:
print('Сработал блок finally')
# Вывод
# Сработало исключение ZeroDivisionError
# Сработал блок finallyПример без исключения:
try:
k = 1 / 10
except ZeroDivisionError:
print('Сработало исключение ZeroDivisionError')
else:
print('Сработал блок else')
finally:
print('Сработал блок finally')
# Вывод
# Сработал блок else
# Сработал блок finally