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 и многом другом.