Не могу создать непрерываемый стек с исполнением команд

Выдает след.результат:

Либо завершает без возможности ввести команду на след.строке

Либо Объект 'int' не вызывается

import sys
​
​
class StackSafeErrors:
    def __init__(self):
        self.items = []
        self.size = 0
​
    def push(self, item):
        self.items.append(int(item))
        self.size += 1
​
    def pop(self):
        if len(self.items) == 0:
            raise OverflowOrIndexError
        else:
            self.size -= 1
            return self.items.pop()
​
    def back(self):
        if len(self.items) == 0:
            raise OverflowOrIndexError
        else:
            return self.items[-1]
​
    def size_(self):
        return self.size
​
    def clear(self):
        self.items.clear()
        return 'ok'
​
    def exit(self):
        sys.exit('bye')
​
​
class OverflowOrIndexError(Exception):
    def __init__(self) -> None:
        pass
​
​
def main():
    stack = StackSafeErrors()
    cmd = sys.stdin.readline().rstrip().split()
    if len(cmd) == 2:
        try:
            getattr(stack, cmd[0])(int(cmd[1]))
        except OverflowOrIndexError:
            print("error")
    else:
        try:
            print(getattr(stack, cmd[0])())
        except OverflowOrIndexError:
            print("error")
​
​
if __name__ == "__main__":
    main()



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

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

у вас все написано правильно, просто при выполнении команды программа завершается(как и должно быть). если вы хотите чтобы поток команд не останвливался, добавьте while True: вот так:

def main():
    stack = StackSafeErrors()
    while True:
        cmd = sys.stdin.readline().rstrip().split()
        if len(cmd) == 2:
            try:
                getattr(stack, cmd[0])(int(cmd[1]))
            except OverflowOrIndexError:
                print("error")
        else:
            try:
                print(getattr(stack, cmd[0])())
            except OverflowOrIndexError:
                print("error")
→ Ссылка
Автор решения: alvaresShD

Решил!

import sys


class StackSafeErrors:
    def __init__(self):
        self.items = []
        self.size = 0

    def push(self, item):
        self.items.append(int(item))
        self.size += 1
        return 'ok'

    def pop(self):
        if len(self.items) == 0:
            raise OverflowOrIndexError
        else:
            self.size -= 1
            return self.items.pop()

    def back(self):
        if len(self.items) == 0:
            raise OverflowOrIndexError
        else:
            return self.items[-1]

    def size_(self):
        return self.size

    def clear(self):
        self.items.clear()
        self.size = 0
        return 'ok'

    def exit(self):
        sys.exit('bye')


class OverflowOrIndexError(Exception):
    def __init__(self) -> None:
        pass


def main():
    stack = StackSafeErrors()
    while True:
        cmd = sys.stdin.readline().rstrip().split()
        if cmd[0] == 'push':
            print(stack.push(cmd[1]))
        if cmd[0] == 'pop':
            print(stack.pop())
        if cmd[0] == 'back':
            print(stack.back())
        if cmd[0] == 'size':
            print(stack.size_())
        if cmd[0] == 'clear':
            stack.clear()
        if cmd[0] == 'exit':
            print(stack.exit())


if __name__ == "__main__":
    main()
→ Ссылка