首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >boost-beast中出现异常

boost-beast中出现异常
EN

Stack Overflow用户
提问于 2021-06-03 16:00:53
回答 1查看 79关注 0票数 0

我使用了Boost::Beast,我得到了一些异常消息,例如: resolve:没有这样的主机是已知的。我希望在我的代码中打印更有意义的消息,这样简单的用户就能知道这条消息是什么意思。我怎么能做到这一点?

这是我在第一个例子中选择使用的例子,但你的例子不适用于我

代码语言:javascript
复制
 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;

    }
EN

回答 1

Stack Overflow用户

发布于 2021-06-06 05:07:02

正如其他人指出的那样,ec && ec != CODE需要是ec && ec == CODE

但是,这种连接是多余的:ec && ec == CODE等同于ec == CODE (除非是!ec.failed())。

我不认为任何条件都是必需的:

代码语言:javascript
复制
    if (ec) {
        std::cout << ec.message() << "\n";
    }

这只会为任何错误打印友好的消息:

代码语言:javascript
复制
#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";
        }
    }
}

打印

代码语言:javascript
复制
Transport endpoint is not connected
No buffer space available
Connection timed out
No buffer space available
Timer expired

切中问题的要旨

对于“你的用户”不会有更友好的错误描述,因为它们总是依赖于你的程序的逻辑和域。因此,程序员需要将任何不可恢复的错误转换为用户友好的条件。

例如,no_buffer_space永远不会有一个有用的“最终用户”描述,因为...你知道buffers只对程序员感兴趣。您可能会将其转换为“系统负载超出”或“模拟太大”或“附件太大”之类的内容。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67817645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档