如何编写安全代码:条件检查Vs异常处理?

时间:2010-07-13 11:07:41

标签: language-agnostic exception-handling

有条件检查:

if denominator == 0:
    // do something like informing the user, or skipping this iteration.
else:
    result = numerator/denominator

if FileExists('path/to/file'):
    // open file read & write.
else:
    // do something like informing the user, or skipping this iteration.

异常处理:

try:
    result = numerator/denominator
catch (DevidedByZeroException):
    //take action

try:
    //open file read & write.
catch (FileNotExistsException):
    //take action

我经常遇到这样的情况。哪一个去?为什么呢?

3 个答案:

答案 0 :(得分:5)

一如既往。

在我看来,例外应该是例外。

如果您经常期待某些事情可能无效,那么您应该进行有条件的检查。无论是否存在问题,都会一直执行条件检查代码,因此检查不会花费很多时间。

您应该在罕见或不太可能的情况下处理异常处理。那么该文件不存在的可能性有多大?

我有一个案例,我想将文件写入网络驱动器,检查UNC共享存在的代码可能需要30秒才能超时,因此您希望在此处使用例外!

答案 1 :(得分:1)

我认为使用异常处理的第二个snipet更好,因为您可以捕获由无法预测的错误生成的其他异常。

并且在很多情况下你的指令不会在出现不好的事情时抛出异常,那么你必须使用条件来检测它,你可以无异常地捕获它或者在try块中使用它并抛出一个很好的实例类

答案 2 :(得分:1)

在第一个示例中,完全有可能在检查和打开之间删除文件,因此无论如何都可以获得FileNotExistsException。在Python社区中,这被称为LBYL(在你跳跃之前看)与EAFP(更容易请求宽恕而非许可)辩论,而Pythonic的共识是EAFP总体上更好。

相关问题