繁体   English   中英

通过这种简单的异常处理,我应该在哪里打印输出?(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子句仅在不引发任何异常时运行。

因此,您要将其放在其中的原因是要使其明确: 您只想在没有异常的情况下打印输出

正如您所提到的,在您的代码中,所发生的事情没有功能上的差异。

有关更多信息,请参阅文档

第一个可以按照您的期望正常工作(假设您不想显示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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM