问题

当使用 read_line() 读取输入流时,如果您不使用 .expect() 跟踪语句,编译器将警告您 this `Result` may be an `Err` variant, which should be handled

我想了解的是什么样的情况会触发这样的错误处理.

我已经尝试将我的程序管道到另一个(./my_program | echo "hello"),所以我没有机会输入任何输入,据称可以看到操作中的错误处理.令我惊讶的是,它实际上导致了恐慌状态:

thread 'main' panicked at 'failed printing to stdout: Broken pipe (os error 32)', src/libstd/io/stdio.rs:792:9

在本书 The Rust Programming Language 中的代码中,我们指定了一个字符串,我相信在程序无法读取输入流时应该打印:

 use std::io;

fn main() {
    println!("Guess the number!");

    println!("Please input your guess.");

    let mut guess = String::new();

    io::stdin().read_line(&mut guess)
        .expect("Failed to read line");

    println!("You guessed: {}", guess);
}
 

我怎样才能在动作中看到这种行为?

  最佳答案

让我们按照来源:

让我们尝试这个:

 $ rustc a.rs # your program
$ echo "\x99" | ./a
Guess the number!
Please input your guess.
thread 'main' panicked at 'Failed to read line: Custom { kind: InvalidData, error: StringError("stream did not contain valid UTF-8") }', src/libcore/result.rs:997:5
note: Run with `RUST_BACKTRACE=1` environment variable to display a backtrace.
 

  相同标签的其他问题

rust