当前位置: 首页 > news >正文

rust 自定义错误(十二)

错误定义:

    let file_content = parse_file("test.txt");if let Err(e) = file_content {println!("Error: {:?}", e);}let file_content = parse_file2("test.txt");if let Err(e) = file_content {match e {ParseFileError::File => println!("Error: File"),ParseFileError::Parse(e) => println!("Error: Parse: {:?}", e),}}fn parse_file(filename: &str) -> Result<i32, Box<dyn error::Error>> {let content = fs::read_to_string(filename)?;let i = content.parse()?;Ok(i)
}
// error
enum ParseFileError {File,Parse(ParseIntError),
}
fn parse_file2(filename: &str) -> Result<i32,ParseFileError> {let s = fs::read_to_string(filename).map_err(|_| ParseFileError::File)?;let i = s.parse().map_err(|e| ParseFileError::Parse(e))?;Ok(i)
}
2.自定义,必须要实现Debug 和 Dispaly
   // 使用 `Display` 实现进行格式化输出println!("{}", person); // 调用 Display 的 `fmt` 方法// 使用 `Debug` 实现进行调试输出println!("{:?}", person); // 调用 Debug 的 `fmt` 方法
use std::error::Error;
use std::fmt;#[derive(Debug)]
pub struct ParsePaymentInfoError {pub msg: String,pub source: Option<Box<dyn Error>>,
}impl fmt::Display for ParsePaymentInfoError {fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {write!(f, "{}: {}", self.msg, self.source.as_ref().map_or("None".to_string(), |e| e.to_string()))}
}// 实现 Error 特征,提供 source 方法
impl Error for ParsePaymentInfoError {fn source(&self) -> Option<&(dyn Error + 'static)> {self.source.as_deref() }
}fn main() {let card_number = "abc";match card_number.parse::<u32>() {Ok(value) => println!("Parsed value: {}", value),Err(e) => {let custom_error = ParsePaymentInfoError {msg: "Failed to parse payment info".to_string(),source: Some(Box::new(e)),};println!("Error: {}", custom_error);// 调用 source() 方法if let Some(source_error) = custom_error.source() {println!("Caused by: {}", source_error);  // 这里调用 source()}}}
}
http://www.lryc.cn/news/529348.html

相关文章:

  • EWM 变更库存类型
  • AI大模型开发原理篇-9:GPT模型的概念和基本结构
  • MySQL数据库(二)
  • 从0到1:C++ 开启游戏开发奇幻之旅(二)
  • 【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】1.18 逻辑运算引擎:数组条件判断的智能法则
  • EasyExcel写入和读取多个sheet
  • LLM架构与优化:从理论到实践的关键技术
  • 【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】1.22 形状操控者:转置与轴交换的奥秘
  • NLP模型大对比:Transformer >Seq2Seq > LSTM > RNN > n-gram
  • DeepSeek部署教程(基于Ollama)
  • Java基础面试题总结(题目来源JavaGuide)
  • WPS mathtype间距太大、显示不全、公式一键改格式/大小
  • 宇宙大爆炸是什么意思
  • MotionLCM 部署笔记
  • VLLM性能调优
  • ESP32-S3模组上跑通esp32-camera(39)
  • Linux《基础指令》
  • 9.进程间通信
  • Windows中本地组策略编辑器gpedit.msc打不开/微软远程桌面无法复制粘贴
  • 供应链系统设计-供应链中台系统设计(十二)- 清结算中心设计篇(一)
  • Vue.js 单页应用(SPA)开发教程:从零开始构建你的第一个项目
  • Linux C openssl aes-128-cbc demo
  • 你了解哪些Java限流算法?
  • 【漫话机器学习系列】065.梯度(Gradient)
  • BswM(基础软件管理)详解
  • 上位机知识篇---GitGitHub
  • 网站快速收录:提高页面加载速度的重要性
  • Vue.js组件开发-实现全屏背景图片滑动切换特效
  • DeepSeek r1本地安装全指南
  • LitGPT - 20多个高性能LLM,具有预训练、微调和大规模部署的recipes