TL; DR: Почему мои исключения срабатывают только в определенных ситуациях, несмотря на то, что это та же ошибка?
Код успешно перехватывает NameError с числовым аргументом all. Поэтому, если кто-то ошибочно вводит число вместо оператора, он выдает правильное сообщение об ошибке исключения. Однако мой код не может уловить другие исключения, и я не уверен, почему.
Например:
print (better_cal c (5, 5, 5))
Это возвращает желаемое сообщение об исключении:
5 5 5 = Ошибка: ошибка имени. Пожалуйста, проверьте введенные вами данные
Однако другие ошибки не обнаруживаются. Вместо этого он завершает программу. Например,
print (better_cal c (5, g, 5))
Это возвращает «NameError: name 'g' is not defined '» , без запуска исключения или сообщения об исключении.
Аналогично
print (better_cal c (5, *, 5))
Это возвращает «SyntaxError: недопустимый синтаксис», не вызывая исключения или сообщения об исключении.
Я понимаю, что если бы я включил в оператор кавычки, код будет работать, однако моя цель - вызвать исключения.
def better_calc(num1, op, num2):
try:
if op == "+":
result = num1+num2
elif op == "-":
result = num1-num2
elif op == "*":
result = num1*num2
elif op == "/":
num1/num2
except NameError:
print(f"Error: Name error. Please check your input")
except UnboundLocalError:
print(f"Error: Value error. Please check your input")
except SyntaxError:
print(f"Error: Syntax Error. Please check your input")
print(num1, op, num2, "=")
return result
print(better_calc(5, 5, 5))