Python предоставляет ряд встроенных исключений, однако иногда имеет смысл сделать свои собственные

Обработка ошибок времени выполнения в Python довольно проста. Вам просто нужно поместить код в блок try-except и обработать исключение из многих встроенных типов исключений, предоставляемых Python. Ниже приведен пример обработки простой ошибки в Python.

number_followers = 40
"Hello, My name is Shivam and I have " + number_followers + " followers on Medium."

Этот фрагмент кода вызовет ошибку, в частности TypeError, поскольку оператор + не может добавить строку и целочисленный тип, я объяснил, как эти операторы работают, в отдельной статье о магических методах, проверьте это, если хотите люблю читать об этом. Так что давайте просто попробуем этот код попробовать-except.

try:
   number_followers = 40
   "My name is Shivam and I have " + number_followers + "on medium."
except TypeError:
   print("A string and integer cannot be concatenated")

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

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

Написать новое настраиваемое исключение довольно просто. Нам нужно расширить класс Exception из встроенного модуля.

Теперь мы можем вызвать это исключение на случай, если в нашем коде что-то не так, и не беспокоить команду клиента точной ошибкой. Таким образом, клиентской группе нужно будет только обработать CircleException, которое будет возникать независимо от того, какая ошибка находится в классе Circle. В дополнение к этому мы можем изменить сообщение об ошибке для более надежной системы ведения журнала на стороне клиента.

На стороне клиента нам просто нужно будет поймать тип CircleException.

Так что вместо этого

s = Circle(5)
try:
    s.area()
except TypeError:
    print("Something wrong with the values sent")
except AttributeError:
    print("Something wrong with the attributes of the class")
except KeyError:
    print("Something went wrong with the keys in shape class")

Мы просто будем обрабатывать CircleException, чтобы клиенту не приходилось сталкиваться со всеми видами ошибок, которые могут возникнуть с нашим CircleClass. Примерно так ниже.

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

Давайте воспользуемся переменной имени метода, инициализировав ее во время создания исключения CircleException в классе Circle.

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

s = Shape(shape_name='circle', radius=5)
try:
    area = s.area()
    circumference = s.circumference()
    diameter = s.diameter()
except CircleException as e:
    print(e)

Предположим, что что-то пошло не так с методом области класса Circle, клиент, у которого не будет доступа для изменения класса Circle, может справиться с этим довольно хорошо, и результат будет примерно таким.

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

Если вам понравилась статья и вы что-то узнали, подпишитесь на меня в твиттере и на другой среде, чтобы узнать больше об этом. Я пишу о Python, Data Science, ML, AI и многом другом.