我使用了Boost::Beast,我得到了一些异常消息,例如: resolve:没有这样的主机是已知的。我希望在我的代码中打印更有意义的消息,这样简单的用户就能知道这条消息是什么意思。我怎么能做到这一点?
这是我在第一个例子中选择使用的例子,但你的例子不适用于我
if (ec && ec != beast::errc::not_connected) {
beast::system_error{ ec };
std::cout << "beast::errc::not_connected" << ec << " with explanatory message " << ec.message() << std::endl;
}
if (ec && ec != beast::errc::no_buffer_space) {
beast::system_error{ ec };
std::cout << "beast::errc::no_buffer_space" << ec << " with explanatory message " << ec.message() << std::endl;
}
if (ec && ec != beast::errc::timed_out) {
beast::system_error{ ec };
std::cout << "beast::errc::timed_out" << ec << " with explanatory message " << ec.message() << std::endl;
}
if (ec && ec != beast::errc::no_buffer_space) {
beast::system_error{ ec };
std::cout << "beast::errc::no_buffer_space" << ec << " with explanatory message " << ec.message() << std::endl;
}
if (ec && ec != beast::errc::stream_timeout) {
beast::system_error{ ec };
std::cout << "beast::errc::stream_timeout" << ec << " with explanatory message " << ec.message() << std::endl;
}发布于 2021-06-06 05:07:02
正如其他人指出的那样,ec && ec != CODE需要是ec && ec == CODE。
但是,这种连接是多余的:ec && ec == CODE等同于ec == CODE (除非是!ec.failed())。
我不认为任何条件都是必需的:
if (ec) {
std::cout << ec.message() << "\n";
}这只会为任何错误打印友好的消息:
#include <boost/beast.hpp>
#include <iostream>
namespace beast = boost::beast;
int main() {
for (auto code : {
beast::errc::not_connected,
beast::errc::no_buffer_space,
beast::errc::timed_out,
beast::errc::no_buffer_space,
beast::errc::stream_timeout,
})
{
boost::system::error_code ec = make_error_code(code);
if (ec) {
std::cout << ec.message() << "\n";
}
}
}打印
Transport endpoint is not connected
No buffer space available
Connection timed out
No buffer space available
Timer expired切中问题的要旨
对于“你的用户”不会有更友好的错误描述,因为它们总是依赖于你的程序的逻辑和域。因此,程序员需要将任何不可恢复的错误转换为用户友好的条件。
例如,no_buffer_space永远不会有一个有用的“最终用户”描述,因为...你知道buffers只对程序员感兴趣。您可能会将其转换为“系统负载超出”或“模拟太大”或“附件太大”之类的内容。
https://stackoverflow.com/questions/67817645
复制相似问题