Выброс исключений

Выброс исключений

Limera1n

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

Можно привести простой пример:

Здесь мы сделали вычисление площади треугольника. Результат правильный, и все работает нормально. А что, если нам в calc_square передать какую-нибудь ерунду? Например отрицательную длину первой стороны:

И мы получаем, вроде бы, опять правильный результат без всяких ошибок. Но мы же calc_square вызывали с неверным аргументом, -10 это отрицательная длина, не может быть длина у треугольника отрицательной. Это говорит о том, что в нашей программе есть какой то скрытый баг, скрытый, потому что чисто визуально все нормально. То есть calc_square не защищена от некорректного ввода. Для этого нам нужно защитить нашу функцию. А защитить мы ее можем сказав клиентскому коду, что он делает что-то не то, и что он не прав. Делается это с помощью возбуждения исключений. В данном случае мы должны проверить на длину все три стороны с помощью условия а так же добавить ключевое слово raise, после него прописать ошибку:

Теперь мы видим ошибку и к ней пояснение. Наша функция теперь защищена, она защищает сама себя, что называется "от дурака". В данном случае мы используем стандартный тип исключения встроенный в стандартную библиотеку Python, которая называется ValueError. Стандартная библиотека на самом деле определяет большое количество исключений, подходящих под разные случаи. Однако их не хватает, чтобы применить ко всем различным случаям. Поэтому работая с различными библиотеками мы будем сталкиваться со всякими кастомными исключениями, которые определяются в этих библиотеках, потому что стандартных все же не хватает. На самом деле мы можем прописывать не ValueError, а какой то свой кастомный тип.

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

Report Page