在什么级别以及如何捕获异常

时间:2012-06-11 09:28:23

标签: exception-handling

我知道这是主观的,但是应该在最低级别或更高级别中捕获异常。 我问,因为我经常做

try 
{
 //..
}
catch
{
 //LOG
}

所以当我实现一些“低级”功能时,比如

std::string read_from_file(const std::string& file_name);

我不知道该怎么办:
1)让调用者处理异常。
2)捕获(记录?)和重新抛出
3)捕获并更改函数以使bool为返回类型(try中的最后一行返回true; catch中的最后一行返回false;)。我不喜欢这个,但我已经看过很多次了 4)???

1 个答案:

答案 0 :(得分:1)

抓住可以真正处理它的级别,或者没有其他地方可以抛出它。

捕获和重新抛出不会处理任何事情,除非您的目的是将异常包装在更具说明性的内容中(例如,Spring持久性通过查看SQL错误代码将SQLException包装成更有意义的内容)。

有时候别无他法。没有用户应该看到堆栈跟踪,因此控制器应该捕获所有内容并重定向到友好的错误页面。

您可以捕获并更改返回类型,但用户正在丢失信息。 “true / false”不会告诉他们与堆栈跟踪相同的信息。为被捕异常发回“成功”并不适合我。

如果您无法处理异常,请将其冒泡到可以的图层。如果你能处理它,那就这样做。