Создание своего исключения
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'