Главная Блог Исключения в Python

Исключения в Python

Исключения в Python – это события, которые возникают в процессе выполнения программы и могут нарушить ее нормальный поток. Когда возникает исключительная ситуация, интерпретатор Python создает объект исключения, который может быть обработан в коде программы.

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

Для обработки исключений в Python используется конструкция try-except. Блок try содержит код, который потенциально может вызвать исключение, а блок except содержит код, который будет выполнен в случае возникновения исключения. В блоке except указывается тип исключения, которое мы хотим обработать. Можно также использовать блок else, который будет выполнен только в том случае, если исключение не возникло в блоке try.

Приведем пример использования конструкции try-except:


try:

result = 10 / 0

except ZeroDivisionError:

print(«Деление на ноль невозможно!»)

else:

print(«Результат:», result)


Этот код попытается выполнить деление 10 на 0. Поскольку это невозможно, возникнет исключение ZeroDivisionError, которое будет перехвачено блоком except, и программа выведет сообщение «Деление на ноль невозможно!». Если бы не возникло исключение, программа бы вывела результат деления.

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

Обработка исключений в Python: try, except, finally, else и raise

Обработка исключений в Python предоставляет механизм для более гибкого управления ошибками во время выполнения программы. Основные конструкции для обработки исключений в Python включают в себя try, except, finally, else и raise.


try:

# Код, который может вызвать исключение

result = 10 / 0

except ZeroDivisionError:

# Обработка исключения

print(«Деление на ноль невозможно!»)



try:

# Код, который может вызвать исключение

result = 10 / 0

except ZeroDivisionError:

# Обработка исключения

print(«Деление на ноль невозможно!»)

finally:

# Блок finally выполнится всегда

print(«Очистка ресурсов…»)



try:

result = 10 / 2

except ZeroDivisionError:

print(«Деление на ноль невозможно!»)

else:

print(«Результат:», result)



def sqrt(x):

if x < 0:

raise ValueError(«Отрицательные числа не имеют квадратных корней»)

else:

return x ** 0.5

 

try:

result = sqrt(-9)

except ValueError as e:

print(e)


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

Среднее время реакции на обращение: 13,5 мин.
Среднее время решения задачи: 1 час 21 мин.

Обработка нескольких исключений

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

Есть два основных способа обработки нескольких исключений.

  1. Несколько блоков except: каждый блок except отвечает за обработку определенного типа исключения.

try:

# Код, который может вызвать исключение

file = open(«nonexistent.txt», «r»)

data = file.read()

file.close()

result = 10 / 0

except FileNotFoundError:

print(«Файл не найден!»)

except ZeroDivisionError:

print(«Деление на ноль невозможно!»)


  1. Один блок except с кортежем исключений: можно использовать один блок except, чтобы обработать несколько типов исключений, перечислив их в кортеже.

try:

# Код, который может вызвать исключение

file = open(«nonexistent.txt», «r»)

data = file.read()

file.close()

result = 10 / 0

except (FileNotFoundError, ZeroDivisionError):

print(«Произошла ошибка!»)


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

Как игнорировать ошибки в Python

В Python есть несколько способов игнорировать ошибки, в зависимости от того, какой вид ошибок вы хотите игнорировать.

  • Использование пустого блока except: можно использовать пустой блок except, чтобы полностью игнорировать все исключения. Этот способ не рекомендуется, так как он может скрыть ошибки и затруднить отладку.

try:

# Код, который может вызвать исключение

result = 10 / 0

except:

pass  # Полное игнорирование всех исключений


  • Использование try-except только для конкретных исключений: если вы знаете, какие исключения могут возникнуть, но хотите игнорировать их, вы можете использовать try-except, чтобы обработать только эти исключения.

try:

# Код, который может вызвать исключение

result = 10 / 0

except ZeroDivisionError:

pass  # Игнорирование конкретного исключения


  • Использование контекстного менеджера warnings: в некоторых случаях вы можете предпочесть получать предупреждения о возможных проблемах вместо полного игнорирования ошибок. Для этого вы можете использовать модуль warnings.

import warnings

 

warnings.filterwarnings(«ignore»)  # Игнорирование всех предупреждений


  • Использование флагов в функциях и методах: Некоторые функции и методы в Python могут предоставлять параметры или флаги, которые позволяют игнорировать определенные ошибки или их обработку. Например, при чтении файлов для проверки можно попробовать использовать флаг errors=»ignore», чтобы игнорировать ошибки кодировки.

with open(«file.txt», «r», errors=»ignore») as file:

data = file.read()


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

 

90% клиентов пришли к нам по рекомендации

Создание собственных исключений

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

  • Определение нового класса исключения: для создания собственного исключения в Python вы определяете новый класс, который наследуется от встроенного класса Exception или его подкласса.

class CustomError(Exception):

pass


  • Добавление информации и специализации: вы можете добавить дополнительные атрибуты и методы к вашему собственному исключению, чтобы предоставить более подробную информацию о возникшей ошибке или специализированное поведение при ее обработке.

class CustomError(Exception):

def __init__(self, message, code):

super().__init__(message)

self.code = code

 

def __str__(self):

return f»CustomError: {self.message} (Code: {self.code})»


  • Поднятие собственного исключения: чтобы создать экземпляр вашего собственного исключения и вызвать его, используйте ключевое слово raise.

def func(x):

if x < 0:

raise CustomError(«Отрицательные значения не поддерживаются», code=1001)

return x ** 0.5

 

try:

result = func(-5)

except CustomError as e:

print(e)


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

Заключение

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

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

Например, при делении числа на ноль (ZeroDivisionError) возникает исключение. Рассмотрим следующий пример строк кода, который иллюстрирует обработку этой ошибки:


try:

result = 10 / 0

except ZeroDivisionError:

print(«Ошибка деления на ноль!»)


Если в коде возникает исключение ZeroDivisionError, Python перехватывает его и выполняет код в блоке except. В данном случае будет выведено сообщение «Ошибка деления на ноль!».

Python также предоставляет возможность обработки различных других типов исключений, таких как TypeError, ValueError, NameError, IndexError, KeyError и многих других. Кроме того, программист может создавать собственные классы исключений для определенных ситуаций.

Конструкция try-except может быть расширена с использованием блока finally, который позволяет выполнить ввод кода независимо от того, возникло исключение или нет. Покажем на примере:


try:

# Код, который может вызвать исключение

result = int(input(«Введите число: «))

except ValueError:

print(«Ошибка! Введено некорректное значение.»)

finally:

print(«Выполнение блока finally.»)


Блок finally будет выполнен в любом случае, даже если исключение не возникло.

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


def divide(x, y):

if y == 0:

raise ZeroDivisionError(«Деление на ноль недопустимо!»)

return x / y


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

Остались вопросы?

Оставьте заявку и наш менеджер свяжется с Вами в течение 15 минут

    Подберем индивидуальное
    решение под ваш запрос

    • Опыт более 8 лет в оказании ИТ-услуг
    • В штате 20 квалифицированных специалистов с разными компетенциями
    • Более 260 успешно реализованных проектов

      Нажимая кнопку «Отправить», я даю свое согласие на обработку моих персональных данных, в соответствии с Федеральным законом от 27.07.2006 года №152-ФЗ «О персональных данных», на условиях и для целей, определенных в Соглашении на обработку персональных данных