gpt4 book ai didi

rust - 有没有办法让 expect() 输出更用户友好的消息?

转载 作者:行者123 更新时间:2023-11-29 08:10:05 28 4
gpt4 key购买 nike

我找到了 expect() 生成的消息对用户非常不友好。考虑以下简短示例...

use std::env;

fn main() {
let imagefn = env::args().skip(1).next().expect("Filename not provided.");
println!("{}", imagefn);
}

错误是:

thread 'main' panicked at 'Filename not provided.', libcore/option.rs:960:5
note: Run with `RUST_BACKTRACE=1` for a backtrace.

我发现 expect() 对编写快速代码非常有用,但希望我能输出更像这样的东西:

Filename not provided.

除非我实际提供环境变量,否则所有其他信息都是隐藏的,作为开发人员,我应该知道这一点。我想我的问题是:

  1. 有没有一种方法可以覆盖 expect() 来执行此操作?
  2. 为什么即使在发布版本中 expect() 也会输出其不友好的消息?

最佳答案

您可以使用 set_hook更改紧急消息。示例:

use std::panic::set_hook;

fn main() {
set_hook(Box::new(|info| {
if let Some(s) = info.payload().downcast_ref::<String>() {
println!("{}", s);
}
}));

// Displays: "My error message":
Option::None::<i32>.expect("My error message");
}

您还可以使用更简单但不稳定(目前)的message():

#![feature(panic_info_message)]

use std::panic::set_hook;

fn main() {
set_hook(Box::new(|info| {
println!("{:?}", info.message().unwrap());
}));

Option::None::<i32>.expect("My error message");
}

请注意,您可以创建自己的扩展方法,该方法使用自定义类型进行 panic。在 panic hook 中,如果你可以向下转换到你的自定义类型,你就确定了 panic 的来源。

关于rust - 有没有办法让 expect() 输出更用户友好的消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51786498/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com