小编Ben*_*son的帖子

源错误是否应该在显示输出中包含该源?

我有一个隐含该Error特征的错误类型,它包装了一个潜在的错误原因,因此该source方法返回Some(source). 我想知道Display我的错误类型的 impl 是否应该包含该源错误的描述。

我可以看到两个选项:

  1. 是的,包含sourceDisplay输出中,例如“打开数据库时出错:没有这样的文件”

这使得只需通过格式化即可轻松打印整个错误链,"{}"但不可能仅显示错误本身而不显示底层源错误链。它还使该source方法有点毫无意义,并且使客户端代码无法选择如何格式化链中每个错误之间的分隔。然而,在我发现的示例代码中,这种选择似乎很常见。

  1. 不,只需打印错误本身,例如“打开数据库时出错”,并将其留给客户端代码来遍历和显示(source如果客户端代码希望将其包含在输出中)。

这使客户端代码可以选择是否仅显示表面错误或整个链,以及在后一种情况下如何格式化链中每个错误之间的分隔。它给客户端代码留下了遍历链的负担,而且我还没有找到一个规范的实用程序来方便地格式化错误链,其中每个错误都只Display自己排除source。(所以我当然有自己的。)

混乱的箱子(我真的很喜欢)似乎暗示有利于选项 2,因为带有字段source但没有display属性的错误变体默认为格式化Display不包含source.

也许我真正的问题是:该方法的目的是什么source?是为了让格式化错误链更加灵活吗?或者Display真的应该输出用户可见的有关错误的所有内容,并且source仅用于开发人员可见的目的?

我希望看到一些关于此的明确指导,最好是在该Error特征的文档中。

#[derive(Debug)]
enum DatabaseError {
    Opening { source: io::Error },
}

impl Error for DatabaseError {
    fn source(&self) -> Option<&(dyn Error + 'static)> {
        match self {
            DataBaseError::Opening { source …
Run Code Online (Sandbox Code Playgroud)

error-handling rust

12
推荐指数
1
解决办法
2749
查看次数

标签 统计

error-handling ×1

rust ×1