有条件检查:
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
我经常遇到这样的情况。哪一个去?为什么呢?
答案 0 :(得分:5)
一如既往。
在我看来,例外应该是例外。
如果您经常期待某些事情可能无效,那么您应该进行有条件的检查。无论是否存在问题,都会一直执行条件检查代码,因此检查不会花费很多时间。
您应该在罕见或不太可能的情况下处理异常处理。那么该文件不存在的可能性有多大?
我有一个案例,我想将文件写入网络驱动器,检查UNC共享存在的代码可能需要30秒才能超时,因此您希望在此处使用例外!
答案 1 :(得分:1)
我认为使用异常处理的第二个snipet更好,因为您可以捕获由无法预测的错误生成的其他异常。
并且在很多情况下你的指令不会在出现不好的事情时抛出异常,那么你必须使用条件来检测它,你可以无异常地捕获它或者在try块中使用它并抛出一个很好的实例类
答案 2 :(得分:1)
在第一个示例中,完全有可能在检查和打开之间删除文件,因此无论如何都可以获得FileNotExistsException。在Python社区中,这被称为LBYL(在你跳跃之前看)与EAFP(更容易请求宽恕而非许可)辩论,而Pythonic的共识是EAFP总体上更好。