在这个简单的异常处理中,我应该在哪里打印我的输出?(Python)
Where should I print my output at this simple exception handling?(Python)
大家好,在 "try" 子句中打印我的输出或将它放在 "except" 子句之后与 "else:" 之间有什么区别吗?
这是代码:
try:
Value1 = int(input("Type the first number: "))
Value2 = int(input("Type the second number: "))
Output = Value1 / Value2
except ZeroDivisionError:
print("Attempted to divide by zero!")
else:
print(Output)
还是这个?
try:
Value1 = int(input("Type the first number: "))
Value2 = int(input("Type the second number: "))
Output = Value1 / Value2
print(Output)
except ZeroDivisionError:
print("Attempted to divide by zero!")
我的意思是哪个更好?因为结果是一样的。
谢谢
else
子句只有在没有抛出异常时才运行。
所以你想把它放在那里的原因是让它明确:你只想在没有异常的情况下打印输出。
正如您所提到的,在您的代码中,所发生的事情在功能上没有区别。
有关详细信息,请参阅 docs。
第一个将按照您的期望正常工作(假设您不想显示 python 错误提示并停止程序)。
它只是规定 IF 第二位数字为零,然后它不会打印 Python 错误提示并将其传递给打印命令(应该是这样)。否则,在所有其他情况下,无论除数是多少,它总是会给出一个输出,这样你就可以消除几乎所有的漏洞。
建议:
将输入类型保持为 float 而不是 int,这样您也可以打印十进制数字输入的除法。 Ex-2/3
就像你已经知道我们在讨论使用 try...except
时的错误处理。
当操作(或其他语句)产生错误时,Python 将停止 try 块的执行,并向下传递到与引发的异常匹配的第一个 except 块。
如果没有与我们的异常匹配的 except 子句,它将在外部 try 语句中传递。这直到它被处理或没有找到处理程序,引发的异常变成 未处理的异常 并且执行停止并显示错误回溯消息。
除了except块我们还可以使用一个finally块,不管是否发生异常都会执行,else块。最后一个对于 try 子句不引发异常时必须执行的代码很有用。
你的例子
你怎么说这两段代码给出了相同的结果。但是,我们在 Python 的 documentation 页上阅读我们有这样的肯定:
"The use of the else clause is better than adding additional code to the try clause because it avoids accidentally catching an exception that wasn’t raised by the code being protected by the try … except statement."
简单地说,如果您有不同的语句引发相同的错误,但对于其中一个您不想捕获它,请将其移至 else 子句。查看此 question on stack 以更好地理解。
因此,在您的情况下,您可以让 print
语句进入 try 块,因为您不会从中捕获某些特定的异常,并且在这种情况下,您放置 print 语句的地方没有太大区别。然而,我认为第二个例子是一个很好的逻辑分离类型“如果没有错误,那么让我们执行打印”。
大家好,在 "try" 子句中打印我的输出或将它放在 "except" 子句之后与 "else:" 之间有什么区别吗? 这是代码:
try:
Value1 = int(input("Type the first number: "))
Value2 = int(input("Type the second number: "))
Output = Value1 / Value2
except ZeroDivisionError:
print("Attempted to divide by zero!")
else:
print(Output)
还是这个?
try:
Value1 = int(input("Type the first number: "))
Value2 = int(input("Type the second number: "))
Output = Value1 / Value2
print(Output)
except ZeroDivisionError:
print("Attempted to divide by zero!")
我的意思是哪个更好?因为结果是一样的。 谢谢
else
子句只有在没有抛出异常时才运行。
所以你想把它放在那里的原因是让它明确:你只想在没有异常的情况下打印输出。
正如您所提到的,在您的代码中,所发生的事情在功能上没有区别。
有关详细信息,请参阅 docs。
第一个将按照您的期望正常工作(假设您不想显示 python 错误提示并停止程序)。 它只是规定 IF 第二位数字为零,然后它不会打印 Python 错误提示并将其传递给打印命令(应该是这样)。否则,在所有其他情况下,无论除数是多少,它总是会给出一个输出,这样你就可以消除几乎所有的漏洞。
建议: 将输入类型保持为 float 而不是 int,这样您也可以打印十进制数字输入的除法。 Ex-2/3
就像你已经知道我们在讨论使用 try...except
时的错误处理。
当操作(或其他语句)产生错误时,Python 将停止 try 块的执行,并向下传递到与引发的异常匹配的第一个 except 块。
如果没有与我们的异常匹配的 except 子句,它将在外部 try 语句中传递。这直到它被处理或没有找到处理程序,引发的异常变成 未处理的异常 并且执行停止并显示错误回溯消息。
除了except块我们还可以使用一个finally块,不管是否发生异常都会执行,else块。最后一个对于 try 子句不引发异常时必须执行的代码很有用。
你的例子
你怎么说这两段代码给出了相同的结果。但是,我们在 Python 的 documentation 页上阅读我们有这样的肯定:
"The use of the else clause is better than adding additional code to the try clause because it avoids accidentally catching an exception that wasn’t raised by the code being protected by the try … except statement."
简单地说,如果您有不同的语句引发相同的错误,但对于其中一个您不想捕获它,请将其移至 else 子句。查看此 question on stack 以更好地理解。
因此,在您的情况下,您可以让 print
语句进入 try 块,因为您不会从中捕获某些特定的异常,并且在这种情况下,您放置 print 语句的地方没有太大区别。然而,我认为第二个例子是一个很好的逻辑分离类型“如果没有错误,那么让我们执行打印”。