Как правильно выйти из бесконечного цикла

Столкнулся с проблемой в цикле. Его нужно прервать по команде "done:", но при этом, чтобы вызывалась ошибка "Invalid input" в блоке try / except.
В моем же случае исключение ошибки ввода не позволяет прервать такой цикл строчкой.

largest = 0
smallest = 0
while True:
    try:
        num = int(input("Enter a number: "))
    except:
        print("Invalid input")
        continue
    if num == "done":
        break
    elif largest < num:
        largest = num
    elif smallest < num:
        smallest = num

print("Maximum is ", largest)
print("Minimum is ", smallest)```

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

Автор решения: S. Nick

Попробуйте так

largest = 0
smallest = 0
fl = False

while True:
    try:
        _input = input("Enter a number: ")
        num = int(_input)
    except Exception as e:
        print(f"Invalid input: {e}")
        num = _input
        fl = True
        #print(f'num = {num}') #
#        continue
        
    if num == "done":
        break
    elif fl:
         fl = False
    elif largest < num:
        largest = num
    elif smallest < num:
        smallest = num

print("Maximum is ", largest)
print("Minimum is ", smallest)

введите сюда описание изображения

→ Ссылка
Автор решения: Be3y4uu_K0T

Предлагаю Вам так:

largest = 0
smallest = 0
while True:
    try:
        answer = input("Enter a number: ")
        number = int(answer)
    except (TypeError, ValueError):
        if answer == "done":
            break
        else:
            print("Invalid input")
    else:
        if largest < number:
            largest = number
        elif number < smallest:
            smallest = number

print("Maximum is ", largest)
print("Minimum is ", smallest)
→ Ссылка
Автор решения: Namerek
values = {0}

while True:
    if (reply := input("Enter a number: ")) == 'done':
        break
    sign = ''
    if reply.startswith(('+', '-')):
        sign, *val = reply
        reply = ''.join(val)
    if not reply.isnumeric():
        print('Wrong value. Try once more.')
        continue

    values.add(
        int(sign + reply)
    )

print("Maximum is ", max(values))
print("Minimum is ", min(values))

Если чем-то не устраивает использование max и min
можно так:

smallest = 0
largest = 0

while True:
    if (reply := input("Enter a number: ")) == 'done':
        break
    sign = ''
    if reply.startswith(('+', '-')):
        sign, *val = reply
        reply = ''.join(val)
    if not reply.isnumeric():
        print('Wrong value. Try once more.')
        continue

    smallest, _, largest = sorted([smallest, int(sign + reply), largest])

print("Maximum is ", smallest)
print("Minimum is ", largest)
→ Ссылка