dev.to | 📄 原文链接 | 2026-10-29 收录

写一个词频工具,我学会了包装错误而不是替换错误

来源:dev.to — 2026-10-28

📋 概述

作者用 Rust 写了个小命令行工具 wfreq,统计 txt、md、pdf 和 docx 文件里出现最多的词。计数只花了一个下午,剩下的时间全用在错误信息上。第一版用 expect,把 PDF 丢进去直接 panic——panic 带着回溯提示,不是给用户看的消息,而且 read_to_string 只接受合法 UTF-8,于是每个 PDF 都「读不了」。第二版改成从 main 返回 Result 并用 thiserror 写好文案,结果自定义消息根本没出现:main 返回 Err 时 Rust 打印的是 Debug 而不是 Display,所有 error 属性都被忽略;正确做法是保留问号,只在最顶层处理一次错误,exit(1) 放在 run() 返回并析构之后,消息走 stderr,重定向输出也不会被污染。第三版更隐蔽:把 io::Error 用竖线下划线丢掉,于是「文件不存在」「权限不足」「不是 UTF-8」全都变成同一句含糊的话。

🔑 核心要点

💡 金句

“when you convert an error, wrap it, don't replace it.”
译:转换一个错误时,要把它包装起来,而不是替换掉它。
← 返回 dev.to 首页