English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Основной курс Python

Контроль потока Python

Функции Python

Типы данных Python

Файловые операции Python

Объекты и классы Python

Python даты и время

Продвинутые знания Python

Руководство по Python

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

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

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

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

>>> class CustomError(Exception):
...      pass
...
>>> raise CustomError
Traceback (последний вызов в начале):
...
__main__.CustomError
>>> raise CustomError("Ошибка")
Traceback (последний вызов в начале):
...
__main__.CustomError: Ошибка

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

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

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

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

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

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

# Определение пользовательских исключений Python
class Error(Exception):
   """Базовый класс для других исключений"""
   pass
class ValueTooSmallError(Error):
   """Исключение вызывается при слишком малых значениях ввода"""
   pass
class ValueTooLargeError(Error):
   """Исключение вызывается при слишком больших значениях ввода"""
   pass
# Наша основная программа
# Пользователь угадывает номер, пока он не угадает правильно
# Ты должен угадать этот номер
number = 10
while True:
   try:
       i_num = int(input("Введи число: "))
       if i_num < number:
           raise ValueTooSmallError
       elif i_num > number:
           raise ValueTooLargeError
       break
   except ValueTooSmallError:
       print("Эта стоимость слишком мала, попробуйте еще раз!")
       print()
   except ValueTooLargeError:
       print("Эта стоимость слишком велика, попробуйте еще раз!")
       print()
print("Поздравляем! Вы угадали!")

Это пример выполнения программы.

Введи число: 12
Эта стоимость слишком велика, попробуйте еще раз!
Введи число: 0
Эта стоимость слишком мала, попробуйте еще раз!
Введи число: 9
Эта стоимость слишком мала, попробуйте еще раз!
Введи число: 10
Поздравляем! Вы угадали!

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

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

Посетите эту страницу, чтобы узнать большеКак обрабатывать исключения в Python.