How to handle error for a block of code?

For language like Python, a try/catch can works on a block of code, to save coding for each possible place of error.
For language like Haskell, I can compose functoins together to get the “final status”.

But for Rust, I learnt the try!/? way to work on one Result. But how can I do it to a few, for example, a sequence of IO operations.

There are several approaches.

  1. Combinators:
  .and_then(|f| f.read_all(&mut vec))
  1. Extract the sequence into its own function returning Result and work with its result.
  2. Variant of the above, but with a closure that you immediatelly run.
(|| -> Result<(), std::io::Error> {
  let f = File::open(fname)?;

The try { .. } block should eventually do something similar to the 3. in much friendlier way, but AFAIK it is not yet stabilized.