Исключения: try, except, finally
Перехват ошибок, raise и оператор with.
Все уроки · Уроки Python: учимся с нуля
try и except
Исключение — это ошибка, возникающая во время работы. Если её не перехватить, программа остановится. Рискованный код помещают в try, а в except описывают реакцию. Перехватывайте как можно более конкретный тип.
def safe_divide(a, b):
try:
return a / b
except ZeroDivisionError:
return None
print(safe_divide(10, 2)) # 5.0
print(safe_divide(1, 0)) # Noneelse и finally
else выполняется только при отсутствии ошибки. finally срабатывает в любом случае и подходит для уборки, например закрытия файла.
try:
value = int("42")
except ValueError:
print("not a number")
else:
print("parsed", value)
finally:
print("done")Собственные ошибки
Если функция получила неверное значение, вызовите raise с понятным сообщением. Для точности можно создать собственный класс ошибки.
class NegativeAmount(Exception):
pass
def withdraw(balance, amount):
if amount < 0:
raise NegativeAmount("amount must be positive")
return balance - amount
try:
withdraw(50, -5)
except NegativeAmount as err:
print("Error:", err)- Не пишите голый except: — он скрывает баги.