Создание своего исключения

lass Deque:
def __init__(self, max_size):
    self.__data = [None] * max_size
    self.__front = max_size - 1
    self.__back = 0
    self.__size = 0

def is_empty(self):
    return self.__size == 0

def push_back(self, value):
    self.__back = self._push(self.__back, 1, value)

def pop_back(self):
    self.__back, value = self._pop(self.__back, 1)
    return value

def push_front(self, value):
    self.__front = self._push(self.__front, -1, value)

def pop_front(self):
    self.__front, value = self._pop(self.__front, -1)
    return value

def _push(self, i, di, value):
    if self.__size >= len(self.__data):
        raise OverflowError
    self.__data[i] = value
    self.__size += 1
    return (i + di) % len(self.__data)

def _pop(self, i, di):
    if self.__size <= 0:
        raise IndexError
    j = (i - di) % len(self.__data)
    x = self.__data[j]
    self.__data[j] = None
    self.__size -= 1
    return j, x


def main():
    count_command = int(input())
    queue_size = int(input())

    queue = Deque(queue_size)
    for _ in range(count_command):
        verb, *values = input().split()
        op = getattr(queue, verb)
        values = tuple(map(int, values))
        try:
            result = op(*values)
        except (IndexError, OverflowError):
            result = 'error'
        if result is not None:
            print(result)

if __name__ == '__main__':
        main()

Для данного кода нужно создать свое исключение вместо raise OverflowError и raise IndexError. Когда я создаю

class MaxItemException(Exception):
    pass

class NoItemException(Exception):
    pass

и пишу вместо raise OverflowError и raise IndexError свои исключения, код перестает работать. Помогите создать свои исключения

class MaxItemException(Exception):
    pass


class NoItemException(Exception):
    pass


class Deque:
    def __init__(self, max_size):
        self.__data = [None] * max_size
        self.__front = max_size - 1
        self.__back = 0
        self.__size = 0

    def is_empty(self):
        return self.__size == 0

    def push_back(self, value):
        self.__back = self._push(self.__back, 1, value)

    def pop_back(self):
        self.__back, value = self._pop(self.__back, 1)
        return value

    def push_front(self, value):
        self.__front = self._push(self.__front, -1, value)

    def pop_front(self):
        self.__front, value =self._pop(self.__front, -1)
        return value

    def _push(self, i, di, value):
        if self.__size >= len(self.__data):
            raise MaxItemException
        self.__data[i] = value
        self.__size += 1
        return (i + di) % len(self.__data)

    def _pop(self, i, di):
        if self.__size <= 0:
            raise NoItemException
        j = (i - di) % len(self.__data)
        x = self.__data[j]
        self.__data[j] = None
        self.__size -= 1
        return j, x


def main():
    count_command = int(input())
    queue_size = int(input())

    queue = Deque(queue_size)
    for _ in range(count_command):
        verb, *values = input().split()
        op = getattr(queue, verb)
        values = tuple(map(int, values))
        try:
            result = op(*values)
        except (IndexError, OverflowError):
            result = 'error'
        if result is not None:
            print(result)


if __name__ == '__main__':
   main()

Здесь код с моими исключениями, но он не работает


Ответы (1 шт):

Автор решения: CrazyElf

Ну так вы в main продолжаете ловить старые исключения, а не те, которые выбрасываете:

        try:
            result = op(*values)
        except (IndexError, OverflowError):
            result = 'error'

Ловите свои новые исключения:

        try:
            result = op(*values)
        except (MaxItemException, NoItemException):
            result = 'error'
→ Ссылка