При написании программ на Python очень важно уметь правильно обрабатывать ошибки и исключения. Это позволяет сделать программу более стабильной и надежной.
Try/except
Код в блоке try выполняется, пока не произойдет ошибка. В этом случае перехватывается соответствующий блок except.
try:
# Код, который может вызвать ошибку
except ExceptionType1:
# Обработка первого типа ошибок
except ExceptionType2:
# Обработка второго типа ошибок
except Exception:
# Обработка всех остальных ошибок
Для блока except можно указать конкретные типы исключений, которые нужно перехватить. Например:
try:
divide(a, b)
except ZeroDivisionError:
print("Деление на ноль!")
except TypeError:
print("Некорректные аргументы!")
Некоторые советы по использованию:
- Указывайте конкретные типы исключений, когда это возможно.
- Не злоупотребляйте общим блоком except, лучше обрабатывать конкретные ошибки.
Raise
С помощью конструкции raise в Python мы можем генерировать собственные пользовательские исключения.
raise ExceptionType(args)
где:
- ExceptionType – это любой класс, наследуемый от Exception. Самые распространённые: Exception, ZeroDivisionError, TypeError и т.д.
- args – необязательные аргументы, передаваемые исключению. Обычно это сообщение об ошибке.
raise ValueError("Неверное значение параметра!")
Assert
Assert – это механизм обработки ошибок в Python, который генерирует исключение AssertionError, если условие assert оказывается ложным.
assert expression, optional_message
- expression – логическое выражение, которое должно возвращать True.
- optional_message – необязательное сообщение, которое будет указано в исключении.
Например:
a = 10
assert a % 2 == 0, "a должно быть четным!"
Если выражение a % 2 == 0 выполняется успешно (a действительно четное), то ничего не произойдет.
Но если выполнится assert a % 3 == 0, то возникнет исключение AssertionError с сообщением:
AssertionError: a должно быть четным!
Плюсы assert:
- Создаёт явные точки проверки в программе.
- Удобное сообщение об ошибке.
В целом, assert – удобный способ проверки предусловий и последовательности действий, что делает код чище. Но не злоупотребляйте assert, не превращайте их в место для обычной логики.