< 返回版块

daiguadaidai 发表于 2021-03-17 23:56

Tags:Error,failure,painc

代码

fn get_parse_err(int_str: &str) -> Result<i32, std::num::ParseIntError> {
    Ok(int_str.parse::<i32>()?)
}

#[test]
fn main_error_kind_test() {
    match get_parse_err("a1") {
        Ok(num) => println!("num: {}", num),
        Err(err) => println!("err: {}", err),
    }
}

输出

err: invalid digit found in string

我期望的是能打印出 出现Error 的行号(第二行)

期望输出如下:

err: [line:2] invalid digit found in string

评论区

写评论
Aya0wind 2021-03-18 11:27

重新包装一下原来的错误类型即可。

#[derive(Debug)]
struct MyParseIntError {
    line: u32,
    inner: std::num::ParseIntError,
}
impl std::fmt::Display for MyParseIntError {
    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
        f.write_str(&format!("[line:{}] {}", self.line, self.inner))
    }
}
impl std::error::Error for MyParseIntError {}

fn get_parse_err(int_str: &str) -> Result<i32, MyParseIntError> {
    int_str.parse::<i32>().map_err(|err| MyParseIntError {
        line: line!(),
        inner: err,
    })
}

#[test]
fn main_error_kind_test() {
    match get_parse_err("a1") {
        Ok(num) => println!("num: {}", num),
        Err(err) => println!("err: {}", err),
    }
}

uno 2021-03-18 08:55

要简单就直接panic!,手写可以用line! 。

1 共 2 条评论, 1 页