Какие условия вызовут обработку ошибок в «read_line» с последующим «ожидаем»? - PullRequest
1 голос
/ 27 сентября 2019

При чтении входного потока с помощью 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

В этом коде из книги Язык программирования Rust мы указываем строку, в которую, как мне кажется,должен быть напечатан, когда программа не может прочитать входной поток:

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);
}

Как я могу увидеть это поведение в действии?

1 Ответ

4 голосов
/ 27 сентября 2019

Давайте проследим за источником:

Давайте попробуем это:

$ 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.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...