例如,写作是不好的做法:
try
{
#some code
}
catch (Exception e){
#some code
}
而不是
try
{
#some code
}
catch (ExceptionName e){ #like ArrayIndexOutOfBoundsException
#some code
}
我想这个问题几乎适用于所有语言,无论是Python,C ++,Java ......还有什么想法吗?
我在问,因为在我看来你不应该这样,因为这意味着你不知道你正在处理什么样的错误以及如何处理它,但我看到有些人这样做
答案 0 :(得分:2)
YES!
这有一个例外:
你想抓住,做某事,然后重新投掷。也许你有一些资源需要在异常发生之前关闭,或者你想告诉用户发生了什么错误:
FileResource fileResource = new FileResource("/some/path");
try {
fileResource.open();
fileResource.dostuff();
//other logic
} catch (Exception e){
fileResource.close();
throw e;
}
因此,当抛出异常时,您可以在程序退出之前关闭资源。
始终捕获最具体的异常类型。
此外,捕获所有异常在Python中非常糟糕,因为您可以捕获语法异常等。
答案 1 :(得分:2)
并非总是如果你的代码在生产中失败,你会想要一个优雅的退出。因此,更广泛的错误处理是个好例子。
def main():
try:
primary_process()
except Exception as e: # Base error class that excludes keyboard interrupts
logging.Error(e) # and other things you don't want to catch.
但是,在您的代码中大多数情况下,您只能按照您的预期处理特定错误:
def something()
part1() # don't expect the potential error to affect this,
part2() # so leave out of try block
try: # this infrequently raises an error for some reason, for now,
part3() # can't avoid. But we can handle if it happens.
except LookupError as e: # specific error expected very infrequently
handle(e)
part4()
另一个相关的Q& A:Why is "except: pass" a bad programming practice?
答案 2 :(得分:1)
是。确切地知道您正在捕获的异常类型总是一个好习惯,因为它有助于更好地处理