Van*_*908 0 panic rust rust-cargo
当 Rust 发生恐慌时,如何禁用“注意:使用RUST_BACKTRACE=1环境变量运行以显示回溯”?我的代码:
use std::{env, fs, path::Path};
fn main() {
let args: Vec<String> = env::args().collect();
if args.len() != 3{
panic!("Incorrect args!");
}
let query: &String = &args[1];
let path: &Path = Path::new(&args[2]);
println!("Search: \"{query}\"\nPath: \"{}\"", path.to_str().unwrap());
match path.exists(){
true => (),
false => {panic!("Invalid file path!");}
}
println!("Success");
}
Run Code Online (Sandbox Code Playgroud)
只是不要用于panic!它不适合的事情,它适用于除非程序中有错误否则不会发生的状态,如果您想发出预期的错误条件信号,您可以像您想象的Result那样使用in无论如何:main
use std::{env, fs, path::Path};
fn main() -> Result<(), &'static str> {
let args: Vec<String> = env::args().collect();
if args.len() != 3 {
return Err("Incorrect args!");
}
let query: &String = &args[1];
let path: &Path = Path::new(&args[2]);
println!("Search: \"{query}\"\nPath: \"{}\"", path.display());
if !path.exists() {
return Err("Invalid file path!");
}
println!("Success");
Ok(())
}
Run Code Online (Sandbox Code Playgroud)
虽然我基本上同意“不”的评论/答案,但我确实认为在某些情况下定制恐慌的输出是有意义的!
例如,如果您正在制作面向用户的 CLI,您可能需要添加一些额外的信息,告诉用户在哪里报告崩溃。
当线程发生恐慌时,Rust 会调用一段称为“恐慌钩子”的代码,默认情况下,该代码会打印文本run with RUST_BACKTRACE=1(加上实际的回溯,如果您设置了该变量)。
您可以通过以下方式使用您自己的函数/闭包覆盖此默认挂钩std::panic::set_hook:
std::panic::set_hook(Box::new(|_| {
println!("My cool panic output");
}));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
297 次 |
| 最近记录: |