Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Python

Пользовательские исключения Python

Пользовательские исключения Python

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

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

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

<час>

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

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

>>> class CustomError(Exception):
...     pass
...

>>> raise CustomError
Traceback (most recent call last):
...
__main__.CustomError

>>> raise CustomError("An error occurred")
Traceback (most recent call last):
...
__main__.CustomError: An error occurred

Здесь мы создали определяемое пользователем исключение с именем CustomError. который наследуется от Exception учебный класс. Это новое исключение, как и другие исключения, можно вызвать с помощью raise оператор с необязательным сообщением об ошибке.

Когда мы разрабатываем большую программу на Python, рекомендуется помещать все определяемые пользователем исключения, которые вызывает наша программа, в отдельный файл. Многие стандартные модули делают это. Они определяют свои исключения отдельно как exceptions.py или errors.py (обычно, но не всегда).

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

<час>

Пример:определяемое пользователем исключение в Python

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

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

# define Python user-defined exceptions
class Error(Exception):
    """Base class for other exceptions"""
    pass


class ValueTooSmallError(Error):
    """Raised when the input value is too small"""
    pass


class ValueTooLargeError(Error):
    """Raised when the input value is too large"""
    pass


# you need to guess this number
number = 10

# user guesses a number until he/she gets it right
while True:
    try:
        i_num = int(input("Enter a number: "))
        if i_num < number:
            raise ValueTooSmallError
        elif i_num > number:
            raise ValueTooLargeError
        break
    except ValueTooSmallError:
        print("This value is too small, try again!")
        print()
    except ValueTooLargeError:
        print("This value is too large, try again!")
        print()

print("Congratulations! You guessed it correctly.")

Вот пример запуска этой программы.

Enter a number: 12
This value is too large, try again!

Enter a number: 0
This value is too small, try again!

Enter a number: 8
This value is too small, try again!

Enter a number: 10
Congratulations! You guessed it correctly.

Мы определили базовый класс с именем Error. .

Два других исключения (ValueTooSmallError и ValueTooLargeError ), которые фактически вызываются нашей программой, являются производными от этого класса. Это стандартный способ определения пользовательских исключений в программировании на Python, но вы не ограничены только этим способом.

<час>

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

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

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

Посетите объектно-ориентированное программирование на Python, чтобы начать изучение объектно-ориентированного программирования на Python.

Давайте рассмотрим один пример:

class SalaryNotInRangeError(Exception):
    """Exception raised for errors in the input salary.

    Attributes:
        salary -- input salary which caused the error
        message -- explanation of the error
    """

    def __init__(self, salary, message="Salary is not in (5000, 15000) range"):
        self.salary = salary
        self.message = message
        super().__init__(self.message)


salary = int(input("Enter salary amount: "))
if not 5000 < salary < 15000:
    raise SalaryNotInRangeError(salary)

Вывод

Enter salary amount: 2000
Traceback (most recent call last):
  File "<string>", line 17, in <module>
    raise SalaryNotInRangeError(salary)
__main__.SalaryNotInRangeError: Salary is not in (5000, 15000) range

Здесь мы переопределили конструктор Exception класс для принятия наших собственных аргументов salary и message . Затем конструктор родительского элемента Exception класс вызывается вручную с помощью self.message аргумент с использованием super() .

Пользовательский self.salary атрибут определен для использования позже.

Унаследованный __str__ метод Exception Затем класс используется для отображения соответствующего сообщения, когда SalaryNotInRangeError поднимается.

Мы также можем настроить __str__ сам метод, переопределив его.

class SalaryNotInRangeError(Exception):
    """Exception raised for errors in the input salary.

    Attributes:
        salary -- input salary which caused the error
        message -- explanation of the error
    """

    def __init__(self, salary, message="Salary is not in (5000, 15000) range"):
        self.salary = salary
        self.message = message
        super().__init__(self.message)

    def __str__(self):
        return f'{self.salary} -> {self.message}'


salary = int(input("Enter salary amount: "))
if not 5000 < salary < 15000:
    raise SalaryNotInRangeError(salary)

Вывод

Enter salary amount: 2000
Traceback (most recent call last):
  File "/home/bsoyuj/Desktop/Untitled-1.py", line 20, in <module>
    raise SalaryNotInRangeError(salary)
__main__.SalaryNotInRangeError: 2000 -> Salary is not in (5000, 15000) range
<час>

Чтобы узнать больше о том, как вы можете обрабатывать исключения в Python, посетите страницу Python Exception Handling.


Python

  1. Типы данных Python
  2. Операторы Python
  3. Оператор передачи Python
  4. Аргументы функции Python
  5. Словарь Питона
  6. Ошибки Python и встроенные исключения
  7. Объектно-ориентированное программирование Python
  8. Наследование Питона
  9. Итераторы Python
  10. type() и isinstance() в Python с примерами