Почему мой try-exception-finally не может работать должным образом

#python #error-handling

#python #обработка ошибок

Вопрос:

это домашнее задание от udemy, мое решение не может работать, вот вопрос:

Напишите функцию, которая запрашивает целое число и выводит его квадрат. Используйте цикл while с блоком try, except, else для учета неправильных входных данных.вот мое решение:

 def ask():
    while True:
        try:
            user_input = int(input('give me int energe:'))
            squ = user_input**2
            print('boom! show you my power:' squ)
        except:
            print('lack of int energe')
            continue
        else:
            print('Gotcha')
            break
        finally:
            print('boooooom')
        
    pass
  

если я ввожу str, исключение работает хорошо, но даже если я ввожу int, он также показывает тот же результат, что и str, почему это происходит??
скриншот моей ошибки

вот правильное решение:

 def ask():
    
    while True:
        try:
            n = int(input('Input an integer: '))
        except:
            print('An error occurred! Please try again!')
            continue
        else:
            break
            
        
    print('Thank you, your number squared is: ',n**2)
  

Я не уверен, почему моя попытка не удалась

Ответ №1:

Ваше print утверждение выдает исключение. Вы не можете добавить строку и значение int с помощью . Либо используйте

 print('boom! show you my power:'   str(squ))
  

или

 print('boom! show you my power:', squ)
  

В общем, нетипизированные операторы except — действительно плохая идея. Если бы вы вместо этого написали except ValueError: , улавливая только ошибку, вызванную попыткой преобразовать строку в int с помощью int() функции, вы бы сразу увидели проблему.

Комментарии:

1. Спасибо вам ооочень много 🙂

Ответ №2:

В вашем коде ошибка заключается в:

 print('boom! show you my power:' squ)
  

squ это type int , и вы используете оператор, где в левой части есть строка, а в правой — int . Либо измените int на строку, либо используйте , символ. Любой из них будет работать:

 print('boom! show you my power:', squ)

print('boom! show you my power:'   str(squ))