【Rust自学】11.3. 自定义错误信息
11.3 自定义错误信息11.3.1. 添加错误信息在 11.2. 断言(Assert) 中我们学习了assert!、assert_eq!和assert_ne!这三个宏而这篇文章讲的是它们的进阶用法。这三个宏可以接收自定义错误信息但这是可选项。如果添加了自定义信息它们会和标准的失败信息一起打印出来- 对于assert!第一个参数是必填的自定义信息作为第二个参数。- 对于assert_eq!和assert_ne!前两个参数是必填的自定义信息作为第三个参数。把自定义信息传进去之后它会被传给format!宏来构建字符串。由于format!可以使用{}占位符所以传进去的信息也可以使用占位符。看个例子pub fn greeting(name: str) - String { format!(Hello {name}!) } #[cfg(test)] mod tests { use super::*; #[test] fn greeting_contains_name() { let result greeting(Carol); assert!(result.contains(Carol)); } }greeting接收一个名为name的字符串切片参数并返回由Hello、name和!拼接而成的字符串。greeting_contains_name测试函数先把greeting(Carol)的返回值赋给result然后在result上调用contains方法检查result是否包含Carol。这段代码现在可以通过测试。现在手动引入一个bug修改greeting函数pub fn greeting(name: str) - String { format!(Hello!) } #[cfg(test)] mod tests { use super::*; #[test] fn greeting_contains_name() { let result greeting(Carol); assert!(result.contains(Carol)); } }这样测试会失败$ cargo test Compiling greeter v0.1.0 (file:///projects/greeter) Finished test profile [unoptimized debuginfo] target(s) in 0.14s Running unittests src/lib.rs (target/debug/deps/greeter-647141eed08f233c) running 1 test test tests::greeting_contains_name ... FAILED failures: ---- tests::greeting_contains_name stdout ---- thread tests::greeting_contains_name (455732) panicked at src/lib.rs:12:9: assertion failed: result.contains(Carol) note: run with RUST_BACKTRACE1 environment variable to display a backtrace failures: tests::greeting_contains_name test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s error: test failed, to rerun pass --lib不过失败信息只说在第12行第9列发生了恐慌并没有提供更友好、更有用的信息。怎么办呢添加自定义信息pub fn greeting(name: str) - String { format!(Hello!) } #[cfg(test)] mod tests { use super::*; #[test] fn greeting_contains_name() { let result greeting(Carol); assert!( result.contains(Carol), Greeting did not contain name, value was {result} ); } }输出$ cargo test Compiling greeter v0.1.0 (file:///projects/greeter) Finished test profile [unoptimized debuginfo] target(s) in 0.09s Running unittests src/lib.rs (target/debug/deps/greeter-647141eed08f233c) running 1 test test tests::greeting_contains_name ... FAILED failures: ---- tests::greeting_contains_name stdout ---- thread tests::greeting_contains_name (456094) panicked at src/lib.rs:12:9: Greeting did not contain name, value was Hello! note: run with RUST_BACKTRACE1 environment variable to display a backtrace failures: tests::greeting_contains_name test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s error: test failed, to rerun pass --lib可以看到自定义信息出现在了错误输出里。这样的信息更有实际意义也更容易找出错误原因。

相关新闻

【Rust自学】11.4. 用should_panic检查恐慌

【Rust自学】11.4. 用should_panic检查恐慌

11.4 用should_panic检查恐慌 11.4.1. 验证错误处理的情况 除了验证代码是否返回正确的值,测试还需要验证代码是否如预期处理了错误情况。例如,可以编写一个测试来验证代码是否在特定条件下发生恐慌。 这类测试需要额外的should_panic属性。用它标记的函…

2026/7/23 18:53:03阅读更多 →
高效办公 AI 智能体搭建,OpenClaw 整合包极简部署方案(含安装包)

高效办公 AI 智能体搭建,OpenClaw 整合包极简部署方案(含安装包)

零基础搭建桌面自动化 AI|OpenClaw v2.7.9 双端整合包部署教程 适配系统:Windows10/11 64 位、macOS 12 及以上 当前版本:v2.7.9(虾壳云稳定整合版) 核心特点 采用全新轻量化封装方案,整套部署无需代码操…

2026/7/23 18:53:03阅读更多 →
【爱马仕】新手友好|Hermes Agent 轻量化部署方案,轻松搭建桌面数字助手(含安装包)

【爱马仕】新手友好|Hermes Agent 轻量化部署方案,轻松搭建桌面数字助手(含安装包)

Windows 快速搭建 Hermes 本地智能 Agent|预整合资源包简化环境配置流程 资源获取地址 Windows 部署包:https://hm.ikidi.top/api/download/package/55?promoCodeIV644F14DA00 前言 Hermes Agent 作为可以操控电脑执行各类任务的桌面本地智能体&…

2026/7/23 18:53:03阅读更多 →
Python在自然科学中的AI应用:高维数据处理与可解释性分析

Python在自然科学中的AI应用:高维数据处理与可解释性分析

1. 项目概述:当Python遇上自然科学中的AI在实验室泡了十年,我深刻体会到自然科学研究者面对高维数据时的痛苦——那些基因序列、气象观测、天体物理信号,动辄成千上万个维度,Excel连打开都费劲。直到五年前我开始系统地将机器学习…

2026/7/23 20:01:27阅读更多 →
OpenAI 昨天卖「可信 Agent」,今天承认模型越狱——Presence 的信任赤字有多大?

OpenAI 昨天卖「可信 Agent」,今天承认模型越狱——Presence 的信任赤字有多大?

一个注定被放在一起读的故事7月22日,OpenAI 正式发布了 Presence。一个面向企业的 AI Agent 编排和管理平台,官方描述是「帮助企业在受控环境中部署可信的 AI Agent,能回答问题、解决问题、使用公司系统、采取经授权的行动,必要时…

2026/7/23 20:01:27阅读更多 →
主板后边为什么经常有两个以太网口?第二个网口的4种用法你绝对不知道

主板后边为什么经常有两个以太网口?第二个网口的4种用法你绝对不知道

主板后边为什么经常有两个以太网口(就是我们常说的网口),一个不够用吗?还能插USB转网卡啊!哈哈,我当初装机的时候也这么想过,结果后来发现,这个“多余”的第二个网口简直是宝藏!它不光是给服务器用的,普通人玩起来也能解锁一大波高级功能。 看,这就是典型的主板后置…

2026/7/23 20:01:27阅读更多 →
【CTF-WEB-代码审计】URL编码绕过路经检查访问flag页面,admin编码为%61%64min

【CTF-WEB-代码审计】URL编码绕过路经检查访问flag页面,admin编码为%61%64min

题目 BITSCTF 2026\题目\WEB\rusty-proxy rusty-proxy I just vibecoded a highly secure reverse proxy using rust, I hope it works properly. http://chals.bitskrieg.in:25001解题思路 访问网站 http://chals.bitskrieg.in:25001http://chals.bitskrieg.in:25001/api/stat…

2026/7/23 20:01:27阅读更多 →
TI HTU模块安全机制与双缓冲配置实战解析

TI HTU模块安全机制与双缓冲配置实战解析

1. HTU模块核心功能与设计哲学解析在嵌入式系统,尤其是汽车电子和工业控制这类对实时性与可靠性要求严苛的领域,微控制器(MCU)内部的数据搬运效率与安全性直接决定了整个系统的成败。德州仪器(TI)的高端定时…

2026/7/23 20:01:27阅读更多 →
【CTF-WEN-PHP】phps查看源代码并用双重URL编码绕过,admin编码为%25%36%31%25%36%34%25%36%44%25%36%39%25%36%45

【CTF-WEN-PHP】phps查看源代码并用双重URL编码绕过,admin编码为%25%36%31%25%36%34%25%36%44%25%36%39%25%36%45

题目 攻防世界-WEB-PHP2 https://adworld.xctf.org.cn/challenges/list 解题 访问网址 http://61.147.171.105:64825/index.phps admin.split().map(c > % c.charCodeAt(0).toString(16).toUpperCase()).join()%61%64%6D%69%6E%61%64%6D%69%6E.split().map(c > % …

2026/7/23 19:59:27阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/23 0:56:31阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/23 0:56:31阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/23 0:56:31阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:00:28阅读更多 →
从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击: https://intelliparadigm.com 第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…

2026/7/23 0:00:28阅读更多 →
油泥处理设备哪里能买到

油泥处理设备哪里能买到

油泥处理设备哪里有?这是许多从事油田、炼化、清罐业务的从业者最关心的问题。根据河南三丰环保设备有限公司的行业经验,选购油泥处理设备的核心在于设备能否适配当地环保法规与原料特性,而非单纯看价格。该公司总经理王钦田先生指出&#xf…

2026/7/23 0:00:28阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/22 22:56:18阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/23 18:58:18阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/23 18:58:18阅读更多 →