有没有办法隐藏正确的名称错误消息?

Is there a way to hide a correct Name Error message?

我正在编写一个简单的函数来计算数字的平方根。提示用户提供一个整数。但是,如果他们提供一个字符串——我希望有一条消息 "You did not give me a number"。

查看下面的代码:

def square(n):
    """Takes a square root of a number :rtype : int """
    if n == int(n):
        return pow(n, 2)

try:
    answer = int(input("...."))
except ValueError:
    print("You did not give me a number!")

final_answer = "{} squared is {}".format(answer, square(answer))
print(final_answer)

适用于整数:

....9
9 squared is 81

使用字符串:

Traceback (most recent call last):
File , line 28, in <module>
final_answer = "{} squared is {}".format(answer, square(answer))
NameError: name 'answer' is not defined

You did not give me a number!

这个错误很合理,因为没有定义答案。但是,有没有办法只 print/return 异常 "You did not give me a number" 而没有 NameError 消息?

谢谢你的帮助!

您可以在 try/except 的末尾添加一个 else 块:

try:
    answer = int(input("...."))
except ValueError:
    print("You did not give me a number!")
else:
    final_answer = "{} squared is {}".format(answer, square(answer))
    print(final_answer)

如果 try 块成功完成,else 块内的代码只会是 运行。这里有一个 link 到 documentation 以获取更多信息。