【无需打开直接搜索微信;-】 操作使用教程: ...
2025-08-09 0
各位编程探险家们,今天我们要聊聊 Rust 世界里一个不怎么愉快但又必不可少的话题 —— 错误处理。想象一下,你正在厨房做饭(编写程序),突然发现盐没了(出现错误),你会怎么做?是直接掀翻厨房(程序崩溃),还是礼貌地告诉家人 "稍等,我去买包盐"(优雅处理错误)?Rust 给了我们这两种选择。
首先登场的是panic!宏,这哥们性格比较刚烈,遇到点不顺心就直接 "原地爆炸"。就像你玩游戏时遇到 bug,屏幕上直接显示错误信息后退出一样。
bash
cargo new rust_error_handlingcd rust_error_handling
rust
fn main() { println!("程序开始运行,一切正常..."); // 模拟出现严重错误 let problem = true; if problem { // 相当于大喊一声"我不行了!"然后罢工 panic!("哎呀妈呀,出大事了!程序扛不住了,先溜了~"); } // 下面这行代码永远不会执行,因为上面已经panic了 println!("程序完美结束!");}
bash
cargo run
运行后你会看到程序先打印正常信息,然后突然在终端输出错误信息并终止,就像一个小朋友得不到糖果就立刻大哭大闹一样。错误信息里会告诉你哪里出了问题,甚至能定位到具体的代码行,这一点还是很贴心的。
panic!虽然粗暴,但在开发调试阶段非常有用,就像医生用 X 光检查病情一样,可以帮我们快速定位问题。
修改src/main.rs:
rust
fn divide(a: i32, b: i32) -> i32 { // 如果除数为0,就触发panic if b == 0 { panic!("除数不能为0啊大哥!你这是想让宇宙爆炸吗?"); } a / b}fn main() { println!("准备计算 10 / 2 = {}", divide(10, 2)); // 这个计算会触发错误 println!("准备计算 10 / 0 = {}", divide(10, 0)); // 这行代码不会执行 println!("所有计算完成!");}
编译运行后,终端会清晰显示错误发生的位置和原因,帮助你快速定位问题所在。
如果说panic!是程序的 "玻璃心爆发",那Result类型就是程序的 "成熟道歉"。它不会直接崩溃,而是告诉你 "出了点小问题,这里是具体情况"。
修改src/main.rs为:
rust
// 定义一个可能出错的函数,返回Result类型fn divide(a: i32, b: i32) -> Result<i32, String> { if b == 0 { // 出错时返回Err变体,包含错误信息 Err(String::from("除数不能为0,数学老师要生气了!")) } else { // 成功时返回Ok变体,包含计算结果 Ok(a / b) }}fn main() { // 第一种处理方式:match匹配 let result1 = divide(10, 2); match result1 { Ok(value) => println!("10 / 2 = {}", value), Err(e) => println!("计算出错:{}", e), } // 第二种处理方式:if let简化 let result2 = divide(10, 0); if let Ok(value) = result2 { println!("10 / 0 = {}", value); } else { println!("10 / 0 计算出错:{}", result2.unwrap_err()); } // 程序会继续执行 println!("即使有错误,程序也能继续运行!");}
编译运行:
bash
cargo run
这次程序不会崩溃,而是会友好地告诉你哪里出错了,然后继续执行后面的代码,就像服务员告诉你 "您点的菜卖完了",但依然会为你提供其他服务一样。
当我们需要连续调用可能出错的函数时,?运算符能让代码更简洁:
rust
use std::fs::File;use std::io::Read;// 读取文件内容的函数fn read_file_content(filename: &str) -> Result<String, String> { // 尝试打开文件,出错则直接返回错误 let mut file = File::open(filename) .map_err(|e| format!("打开文件失败:{}", e))?; let mut content = String::new(); // 尝试读取文件,出错则直接返回错误 file.read_to_string(&mut content) .map_err(|e| format!("读取文件失败:{}", e))?; // 成功则返回内容 Ok(content)}fn main() { let result = read_file_content("test.txt"); match result { Ok(content) => println!("文件内容:\n{}", content), Err(e) => println!("操作失败:{}", e), }}
创建一个测试文件(可选):
bash
echo "这是一个测试文件" > test.txt
编译运行后,如果文件存在,会显示文件内容;如果文件不存在,会友好地提示错误,而不是直接崩溃。
本文以通俗易懂的方式讲解 Rust 错误处理的基础知识,通过生动类比和完整案例,详细介绍 panic! 宏的使用场景和 Result 类型的错误处理方法,帮助初学者快速掌握如何在 Rust 中处理程序错误,从 "粗暴崩溃" 提升到 "优雅处理" 的境界。
#Rust #错误处理 #panic 宏 #Result 类型 #Rust 入门
相关文章
本文陈述所有内容皆有可靠信息来源,具体资料赘述在文中结尾起了个国泰的名字,却不念国泰民。它是无数乘客心中的不二选择,曾四次获得“全球最佳航空公司”,占...
2025-08-09 0
亲,这款游戏可以开挂的,确实是有挂的,很多玩家在这款游戏中打牌都会发现很多用户的牌特别好,总是好牌,而且好像能看到-人的牌一样。所以很多小伙伴就怀疑这...
2025-08-09 0
来源:【河北经济日报】本报讯(通讯员王振)近日,国家“东数西算”工程张家口枢纽数据中心集群水资源精细化管理迈入新阶段。据悉,张家口秦淮数据项目应用由建...
2025-08-09 0
中国网讯 8月8日是全民健身日,2025减重与健康管理学术交流会在京举办,“全民主动健康6623减重科普计划”在会上启动。活动将积极发挥媒体的引导作用...
2025-08-09 0
潮新闻客户端 记者 陈薇“没想到阿联酋航空杭州飞迪拜,半夜12点多的航班,座位全满。”8月8日凌晨,杭州市民王女士(化名)在社交平台上分享了阿联酋航空...
2025-08-09 0
今天,微信团队发布了 iOS 微信 8.0.62 正式版更新,下面来看看有什么变化吧!朋友资料页这次微信更新了朋友资料页,之前版本朋友资料与朋友权限是...
2025-08-09 0
发表评论