0

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

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

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

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

我不确定我应该怎么做:
1)让调用者处理异常。
2) catch (log?) and rethrow
3) catch 和 change 函数,使得 bool 是返回类型(try 中的最后一行是 return true;catch 中的最后一行是 return false;)。我不喜欢这个,但我已经看过很多次了。
4)???

4

1 回答 1

1

在可以真正处理它的水平或没有其他地方可以扔它的情况下抓住它。

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

有时没有其他地方可去。任何用户都不应该看到堆栈跟踪,因此控制器应该捕获所有内容并重定向到友好的错误页面。

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

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

于 2012-06-11T09:33:53.900 回答