首页 > 其他分享 >错误处理:fmt::Display & std::error::Error

错误处理:fmt::Display & std::error::Error

时间:2024-06-07 09:04:24浏览次数:18  
标签:std trait fmt JsonError Error 错误处理 Display

错误处理

为什么要给错误类型(如 JsonError) 实现 fmt::Display trait?

在 Rust 中,fmt::Display trait 允许你定义一个类型如何被格式化为人类可读的字符串。这通常用于错误信息、日志记录或任何其他用户输出。实现 fmt::Display 需要定义 fmt 函数,该函数写入特定格式的数据到提供的 fmt::Formatter 中,并返回一个 fmt::Result

use std::fmt;

struct Point {
    x: i32,
    y: i32,
}

impl fmt::Display for Point {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        // 使用 write! 宏向 Formatter 写入格式化后的字符串
        write!(f, "({}, {})", self.x, self.y)
    }
}

fn main() {
    let point = Point { x: 1, y: 2 };
    println!("{}", point);  // 当调用 println! 宏时,会自动调用 Point 类型的 fmt 方法
}
为什么要为 JsonError 实现 Error trait?
  1. 兼容性:实现 Error trait 使得 JsonError 可以兼容 Rust 标准库中的错误处理工具和模式。这意味着任何期望一个实现了 Error trait 的类型的函数或库都可以使用 JsonError
  2. 扩展性:通过实现 Error trait,可以为 JsonError 提供更多的上下文信息,如错误描述和错误来源,这使得错误调试和处理更为方便。
  3. 灵活性:实现了 Error trait 的 JsonError 可以很容易地与其他错误类型进行转换和包装,例如使用 Result 类型或 ? 操作符来传播错误。

标签:std,trait,fmt,JsonError,Error,错误处理,Display
From: https://blog.csdn.net/m0_60654790/article/details/139514438

相关文章

  • LNMP 环境下使用 Zstd 压缩优化网站备份脚本
    网站的备份一直都是网站运营、服务器运维中很重要的一环,明月无论是在自己的服务器还是客户的代运维服务器上都是非常重视网站备份的,尤其热衷于优化网站备份这块儿,毕竟明月自己的服务器配置一直都是最低的1H1G呀,就这配置常年都是4-5个网站放着呢!明月的博客毕竟有十来年了,单......
  • Java中的错误处理和日志记录:提升应用的健壮性和可维护性
            在Java开发中,有效的错误处理和日志记录是确保应用健壮性和可维护性的关键。通过恰当的异常处理和详尽的日志信息,开发者可以迅速定位和解决问题,同时提供程序运行的透明度。本文将探讨Java中的错误处理最佳实践和日志记录技术,包括常用的日志框架和配置方法。###......
  • 【Zstd: 压缩全能王】
    什么是Zstdzstd是Facebook在2016年开源的新无损压缩算法,优点是压缩率和压缩/解压缩性能都很突出。效果对比压缩率与压缩速度,此图来源Zstd官网,为一些经典的压缩算法对比,CompressornameRatioCompressionDecompress.zstd1.5.6-12.887510MB/s1580MB/shttps://www.zl......
  • Spring Boot 3.x集成FastDFS记录
    最近在做一个课程,需要用讲一下SpringBoot使用文件上传的功能,选择了FastDFS作为文件存储OSS。SpringBoot是最新的3.3.0版本,JDK版本是17,中间有一些坑,下面记录一下。<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</......
  • C标准库的错误处理机制
    引言在C语言编程中,错误处理是确保程序健壮性和稳定性的重要部分。C标准库提供了一系列工具和函数,帮助开发者检测、报告和处理错误。本文将详细探讨C标准库的错误处理机制,包括标准错误处理函数、异常处理、错误代码以及错误处理的最佳实践。第一章:C标准库中的错误处理基础C......
  • error:connot bind non-const lvalue reference of type ‘std::__cxx11::string& {ak
    实习记录犯错日志:std::stringutf8_str=gbk_to_utf8((char*)struCIDAlarmInfo.sCIDCode);代码这样写则报如题所示的错误,error:connotbindnon-constlvaluereferenceoftype'std::__cxx11::string&{akastd::cxx11::basic_string<char>&}toanrvalueoftype'......
  • C++的std::optional的用法
    C++的std::optional的用法在编程中,处理可能为空的变量或结果是一个常见的挑战。确实,传统的几种方法都有其局限性,可能导致代码的可读性和可维护性降低。如下的方式:使用特殊值标记:虽然使用特殊值(如-1、INFINITY、nullptr等)来标记无效或缺失的值很常见,但这种方法有其缺点。......
  • std::numeric_limits::max和宏定义重复报错问题
    std::numeric_limits::max和宏定义重复报错问题问题描述今天在编译BeckhoffADS开源组件的时候发现编译报错,报错代码如下longAdsDevice::ReadReqEx2(uint32_tgroup,uint32_toffset,size_tlength,void*buffer,uint32_t*bytesRead)const{if(length>std::nume......
  • 【Docker】docker-compose文件快速部署RustDesk远程桌面平替TeamViewer
    1.服务器安装Docker服务2.创建docker-compose.yaml文件version:'3'networks:rustdesk-net:external:falseservices:hbbs:#RustDeskID/Rendezvous服务器container_name:hbbsports:-21115:21115#用于NAT类型测试的TCP......
  • macOS下使用bits/stdc++.h万能头文件
     macOS下使用bits/stdc++.h万能头文件1.终端中输入echo|g++-v-xc++-E-#include<...>searchstartshere:/usr/local/include/Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/Library/Developer/CommandLineTools/usr/lib/clang/12.......