[英]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
子句仅在不引发任何异常时运行。
因此,您要将其放在其中的原因是要使其明确: 您只想在没有异常的情况下打印输出 。
正如您所提到的,在您的代码中,所发生的事情没有功能上的差异。
有关更多信息,请参阅文档 。
第一个可以按照您的期望正常工作(假设您不想显示python错误提示并暂停程序)。 它只是简单地规定IF第二位数为零,那么它将不打印Python错误提示并将其传递给print命令(这就是应该的方式)。 否则,在任何其他情况下,无论除数是多少,它都将始终提供输出,从而消除几乎所有漏洞。
建议:保持输入类型为float而不是int,这样您就可以打印除以小数的输入。 前三分之二
就像您已经知道的那样,当我们使用try...except
时,我们正在谈论错误处理。
当某个操作(或其他语句)生成错误时,Python将停止try块执行,并向下传递到与引发的异常匹配的第一个除外块 。 如果没有匹配我们异常的except子句,则在外部try语句中传递它。 直到处理完毕或未找到任何处理程序为止,引发的异常将成为未处理的异常,并且执行过程将停止并显示错误回溯的消息。
除了except块之外,我们还可以使用finally块 ,无论是否发生异常,都将执行finally块 ,else块。 对于try子句未引发异常的必须执行的代码,最后一个有用。
您怎么说这两段代码的结果相同。 但是,在Python的文档页面上阅读后,我们得到了以下确认:
“ 使用else子句比向try子句添加其他代码更好,因为它避免了意外捕获try ... except语句所保护的代码未引发的异常。 ”
简单来说,如果您有引发同一错误的不同语句,但是对于其中一个语句,您不希望捕获它,请将其移至else子句。 在堆栈上查看此问题以更好地理解。
因此,在您的情况下,您可以将print
语句放到try块中,因为您不会从中捕获某些特定的异常,并且在这种情况下,您放置print语句并没有太大区别。 但是,我认为第二个示例是一个很好的逻辑分离,类型为“如果发现错误,则执行打印”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.