Вы пытаетесь преобразовать входные данные в числа с плавающей точкой до блока catch, поэтому ошибка появляется перед блоком catch и не перехватывается. Прочитайте входные данные вне блока catch, но приведите их к плавающим значениям позже внутри блока catch.
Еще лучше, вместо того, чтобы пытаться привести и бросить ValueErrors, сначала проверьте, является ли строка на самом деле числом. Сделайте это с string.isdigit () .
Проверка входных данных путем создания и перехвата исключений является плохой практикой. Общий совет - проверять и проверять все виды условий, которые вы можете разумно ожидать, и отлавливать и генерировать исключения только в тех ситуациях, которые вы не можете предвидеть. Когда вы пишете предложение try-catch, вы предполагаете, что какая-то ошибка может произойти по какой-то причине вне вашего контроля, но вы не знаете, почему, где или как. генерирование исключений предназначено для ошибок, а не только для нормального предсказуемого потока программы.
if not (num1.isdigit() and num2.isdigit()):
print("invalid number")
else:
// proceed