【发布时间】:2021-02-12 13:24:25
【问题描述】:
我在使用 .expect() 处理错误时遇到问题。
这是我的代码:
src/main.rs
mod myerrors;
fn main() {
mytest().expect("incorrrect number");
//let shows: Vec<Show> = download().expect("read error");
//print(shows);
}
fn mytest() -> std::result::Result<i8, myerrors::MyError>
{
let stdin = std::io::stdin();
let mut line: String = String::new();
match stdin.read_line(&mut line)
{
Ok(_) => {},
Err(_) => return Err(myerrors::DownloadError),
};
let num: i8 = match line.parse::<i8>()
{
Ok(num) => num,
Err(_) => return Err(myerrors::MyError),
};
return Ok(num);
}
src/myerrors.rs
pub struct MyError;
impl std::fmt::Debug for MyError
{
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result
{
f.debug_struct("DownloadError").finish()
}
}
它会构建,但在任何输入 thread 'main' 在 'incorrrect number: DownloadError', src/main.rs:4:14 处发生恐慌后崩溃。
【问题讨论】:
-
line.parse::<i8>()正在返回错误。.expect试图解开结果,但因为这是一个错误而恐慌。这是.expect的预期行为。问题在于你的代码逻辑,而不是错误处理 -
您的意见是什么?您希望发生什么?
-
@IbraheemAhmed 我修复了这个问题,但仍然存在相同的错误
-
@kmdreko 即使我输入“123”,我也会在 main 中出现恐慌错误
标签: rust