Чтобы вызвать собственное исключение в Python, нужно:
Exception или одного из его подклассов.raise для выброса исключения, создав экземпляр класса исключения.
class MyCustomError(Exception):
    """Моё собственное исключение."""
    pass
def my_function(value):
    if value < 0:
        raise MyCustomError("Значение должно быть положительным")
try:
    my_function(-1)
except MyCustomError as e:
    print(f"Поймано исключение: {e}")
Чтобы вызвать собственное исключение в Python, необходимо выполнить следующие шаги:
Exception или одного из его подклассов (например, ValueError, TypeError).  Имя класса должно отражать суть исключительной ситуации.  Часто добавляют суффикс "Error" или "Exception".raise:  Ключевое слово raise используется для "бросания" исключения.  После raise указывается экземпляр исключения, который необходимо вызвать.Вот пример кода:
    
# Определяем собственное исключение
class MyCustomError(Exception):
    """
    Пользовательское исключение для особых случаев.
    """
    def __init__(self, message="Произошла пользовательская ошибка."):
        self.message = message
        super().__init__(self.message)  # Вызываем конструктор родительского класса
# Функция, которая может вызвать исключение
def process_data(value):
    if value < 0:
        # Создаем экземпляр исключения с сообщением
        raise MyCustomError("Значение не может быть отрицательным.")
    else:
        print("Значение обработано:", value)
# Пример использования с обработкой исключения
try:
    process_data(-5)
except MyCustomError as e:
    print("Поймано исключение:", e)
except Exception as e:
    print("Поймано другое исключение:", e) #обработка других, неожиданных исключений
else:
    print("Все прошло успешно!")
finally:
    print("Завершение блока try-except.")
    
  
  Пояснения к коду:
MyCustomError наследуется от Exception. Конструктор принимает необязательное сообщение.process_data проверяет, является ли входное значение отрицательным. Если да, то создается экземпляр MyCustomError с соответствующим сообщением, и он вызывается с помощью raise.try...except используется для перехвата и обработки исключения.  Если в блоке try возникает MyCustomError, то выполняется блок except MyCustomError as e. e в этом случае содержит экземпляр исключения, и можно получить доступ к его сообщению (e.message).except Exception as e обрабатывает любые другие исключения, которые не были обработаны предыдущими блоками except. Это хорошая практика для предотвращения неожиданного завершения программы.finally блок выполнится в любом случае, будь то исключение или нет. Он часто используется для освобождения ресурсов.Важно: Вызывайте исключения только в тех случаях, когда программа не может продолжить выполнение в нормальном режиме. Не используйте исключения для обычного контроля потока выполнения, поскольку это может негативно повлиять на производительность.