Рубрики
Без рубрики

Обработка исключения Python – попробуйте, кроме, наконец

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

Автор оригинала: Pankaj Kumar.

Обработка исключения Python – попробуйте, кроме, наконец

  • Исключения являются сценариями ошибок, которые изменяют нормальный поток выполнения программы.
  • Процесс заботы о возможных исключениях называется обработкой исключения.
  • Если исключения не обрабатываются должным образом, программа может расторгнуть преждевременно. Это может привести к повреждению данных или нежелательных результатах.
  • Обработка исключения Python достигается тремя ключевое слово . Блоки – попробуйте, кроме, и, наконец.
  • попробуйте Блок содержит код, который может повысить исключения или ошибки.
  • кроме Блок используется, чтобы поймать исключения и справиться с ними.
  • Код Catch Block выполняется только тогда, когда соответствующее исключение поднимается.
  • Там могут быть несколько блоков Catch. Мы также можем поймать несколько исключений в одном блоке Catch.
  • Наконец Блок-код всегда выполняется, должна ли программа выполнить правильно или подняла исключение.
  • Мы также можем создать блок « else » с помощью блок TRY – кроме блока. Код внутри остального блока выполнен, если не подняты исключения.

Как обрабатывать исключения в Python?

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

def divide(x, y):
    print(f'{x}/{y} is {x / y}')


divide(10, 2)
divide(10, 0)
divide(10, 4)

Если мы запустим вышеуказанную программу, мы получаем следующий вывод.

10/2 is 5.0
Traceback (most recent call last):
  File "/Users/pankaj/Documents/PycharmProjects/PythonTutorialPro/hello-world/exception_handling.py", line 6, in 
    divide(10, 0)
  File "/Users/pankaj/Documents/PycharmProjects/PythonTutorialPro/hello-world/exception_handling.py", line 2, in divide
    print(f'{x}/{y} is {x / y}')
ZeroDivisionError: division by zero

Второй вызов функции Divide () поднял ZerodivisionError Исключение и программа прекращена.

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

Давайте переписываем метод Divide () с надлежащей обработкой исключения. Если кто-то пытается разделить на 0, мы поймаем исключение и распечатаем сообщение об ошибке. Таким образом, программа не будет расторгнуто преждевременно, а выпуск будет иметь больше смысла.

def divide(x, y):
    try:
        print(f'{x}/{y} is {x / y}')
    except ZeroDivisionError as e:
        print(e)


divide(10, 2)
divide(10, 0)
divide(10, 4)

Выход:

10/2 is 5.0
division by zero
10/4 is 2.5
Обработка исключения Python

Что такое класс baseexception?

Класс Baseexception – это базовый класс всех исключений. Он имеет четыре подкласса.

  1. Исключение – Это базовый класс для всех неходных исключений.
  2. Generatorexit – Запрос, чтобы выйти генератор.
  3. KeyboardInterrupt – Программа прервана пользователем.
  4. SystemExit – Запросить выйти из переводчика.

Некоторые встроенные классы исключения

Некоторые из встроенных классов исключения в Python являются:

  • Арифметикрор – Это базовый класс для арифметических ошибок.
  • AssertionError – поднял, когда утверждение не удается.
  • AttributeError – Когда атрибут не найден.
  • BufferError
  • EOFERROR – Чтение после окончания файла
  • ImportError – Когда импортируемый модуль не найден.
  • Дисплеоперероль – Базовое исключение по ошибкам поиска.
  • Memoryerror – Когда происходит вне памяти
  • NameError – Когда имя не найдено глобально.
  • Осэррор – Базовый класс для ошибок ввода/вывода
  • Справочник
  • Ошибка выполнения
  • Заставка , Западасинтезация
  • SyntaxError – Неверный синтаксис
  • Системрор – Внутренняя ошибка в переводчике Python.
  • Типеррор – неверный тип аргумента
  • ValueError – Неверное значение аргумента

Некоторые встроенные предупреждающие классы

Предупреждающий класс является базовым классом для всех предупреждений. Он имеет следующие подклады.

  • Byteswarning – Байты и предупреждения, связанные с буфером, в основном связанные с конвертацией и сравнением строки.
  • Обесценивание сырьера – предупреждение о устаревших функциях
  • Будущее – Базовый класс для предупреждения о конструкциях, которые будут изменяться семантически в будущем.
  • ImportWarning – предупреждение о ошибках в импорте модуля
  • Pendendeddeprecationwarning – предупреждение о признаках, которые будут устарены в будущем.
  • ResourceWarning – Предупреждения об использовании ресурсов
  • Runtimewarning – Предупреждения о сомнительном поведении время выполнения.
  • Syntaxwarning – предупреждение о сомнительном синтаксисе
  • Unicodewarning – Предупреждения, связанные с Unicode
  • UserWarning – Предупреждения, генерируемые пользовательским кодом

Обращение с несколькими исключениями в одном кроме блока

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

def divide(x, y):
    try:
        print(f'{x}/{y} is {x / y}')
    except ZeroDivisionError as e:
        print(e)
    except TypeError as e:
        print(e)
    except ValueError as e:
        print(e)

Код в каждом кроме блока одинаково. В этом сценарии мы можем обрабатывать несколько исключений в одном кроме блока. Мы можем передавать актуальные объекты исключения в кроме блока, чтобы поймать несколько исключений.

def divide(x, y):
    try:
        print(f'{x}/{y} is {x / y}')
    except (ZeroDivisionError, TypeError, ValueError) as e:
        print(e)

Catch – все исключения в одном кроме блока

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

Пустое предложение, кроме как последнее в цепочке обработки исключений.

def divide(x, y):
    try:
        print(f'{x}/{y} is {x / y}')
    except ZeroDivisionError as e:
        print(e)
    except:
        print("unknown error occurred")

Использование остального блока с попробовать

Код остального блока является необязательным. Это выполняется, когда нет исключения, поднятых блоком TRY.

def divide(x, y):
    try:
        print(f'{x}/{y} is {x / y}')
    except ZeroDivisionError as e:
        print(e)
    else:
        print("divide() function worked fine.")


divide(10, 2)
divide(10, 0)
divide(10, 4)

Выход:

Python попробуй, кроме блокировки другого

Код остального блока выполняется в два раза, когда функция Divide () попробуйте блок работать без какого-либо исключения.

Используя наконец-то блок с попробовать

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

def divide(x, y):
    try:
        print(f'{x}/{y} is {x / y}')
    except ZeroDivisionError as e:
        print(e)
    else:
        print("divide() function worked fine.")
    finally:
        print("close all the resources here")


divide(10, 2)
divide(10, 0)
divide(10, 4)

Выход:

Python попробуй, кроме другого, наконец-то блокировать

Синтаксис обработки исключений Python

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

try -> except 1...n -> else -> finally

У нас может быть много блоков для блока попробовать. Но мы можем иметь только один и наконец-то блок.

Создание пользовательского класса исключений

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

class EmployeeModuleError(Exception):
    """Base Exception Class for our Employee module"""
    pass


class EmployeeNotFoundError(EmployeeModuleError):
    """Error raised when employee is not found in the database"""

    def __init__(self, emp_id, msg):
        self.employee_id = emp_id
        self.error_message = msg


class EmployeeUpdateError(EmployeeModuleError):
    """Error raised when employee update fails"""

    def __init__(self, emp_id, sql_error_code, sql_error_msg):
        self.employee_id = emp_id
        self.error_message = sql_error_msg
        self.error_code = sql_error_code

Конвенция об именовании заключается в суффиксе имени класса исключения с «Ошибками».

Повышение исключений

Мы можем использовать ключевое слово «Поднять», чтобы бросить исключение из нашего кода. Некоторые из возможных сценариев:

  • Валидация параметров ввода функций не удается
  • Ловить исключение и затем бросать пользовательское исключение
class ValidationError(Exception):
    pass


def divide(x, y):
    try:
        if type(x) is not int:
            raise TypeError("Unsupported type")
        if type(y) is not int:
            raise TypeError("Unsupported type")
    except TypeError as e:
        print(e)
        raise ValidationError("Invalid type of arguments")

    if y is 0:
        raise ValidationError("We can't divide by 0.")


try:
    divide(10, 0)
except ValidationError as ve:
    print(ve)

try:
    divide(10, "5")
except ValidationError as ve:
    print(ve)

Выход:

We can't divide by 0.
Unsupported type
Invalid type of arguments

Вложенные попробовать за исключением блоков пример

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

x = 10
y = 0

try:
    print("outer try block")
    try:
        print("nested try block")
        print(x / y)
    except TypeError as te:
        print("nested except block")
        print(te)
except ZeroDivisionError as ze:
    print("outer except block")
    print(ze)

Выход:

outer try block
nested try block
outer except block
division by zero

Python Exception Обращаясь за лучшие практики

  • Всегда старайтесь обрабатывать исключение в коде, чтобы избежать ненормального завершения программы.
  • При создании таможенного класса исключения суффикс его название с «ошибкой».
  • Если кроме положения имеют тот же код, попробуйте поймать несколько исключений в одном кроме блока.
  • Используйте, наконец, блокировать, чтобы закрыть тяжелые ресурсы и удалить тяжелые объекты.
  • Используйте остальные блоки для журнала успешного выполнения кода, отправьте уведомления и т. Д.
  • Избегайте как можно большего размера, кроме как можно больше. Если вы не знаете об исключениях, то только используйте его.
  • Создание классов исключения для конкретных модулей для конкретных сценариев.
  • Вы можете ловить исключения в за исключением блоке, а затем поднять еще одно исключение, что является более значимым.
  • Всегда поднимайте исключения со значимыми сообщениями.
  • Избегайте вложенных блоков, кроме слоев, потому что это уменьшает читаемость кода.

Рекомендации: