为何Rust程序使用expect仍触发panic?新手技术求助
为什么Rust里用expect和unwrap都会触发panic?
你误解了expect的作用——它和unwrap的核心逻辑完全一致:当Result类型是Err时,直接触发panic终止程序。两者的唯一区别是,expect允许你自定义panic时显示的错误文本,而unwrap用的是Rust内置的默认错误消息。
回到你的代码:字符串"4a"无法被解析成i32,所以age.trim().parse()必然返回Err值。不管你调用unwrap还是expect,只要Result是Err,程序就会panic——expect只是把默认错误换成了你写的"What was this?",并不会改变"失败就崩溃"的行为。
如果你不想让程序panic,应该显式处理错误,比如用match分支:
fn main() { let age = "4a"; match age.trim().parse::<i32>() { Ok(age2) => println!("解析结果: {:?}", age2), Err(_) => println!("输入不是合法的整数"), } }
或者更简洁的if let:
fn main() { let age = "4a"; if let Ok(age2) = age.trim().parse::<i32>() { println!("解析结果: {:?}", age2); } else { println!("输入格式错误"); } }
内容的提问来源于stack exchange,提问作者ecorrales
相关产品推荐
相关产品推荐

