Rust `Result<T, E>` is an algebraic data type. Python doesn't have equivalent builtin construct, but it can simply be emulated using union and dataclasses. For example: ```python from typing import TypeVar from dataclasses import dataclass @dataclass class Ok(Generic[T]): value: T @dataclass class Err(Generic[E]): error: E Result = Ok[T] | Err[E] ``` It does play well with pattern matching: ```python def unwrap(result: Result[T, E]) -> T: match result: case Ok(v): return v case Err(e): raise e if isinstance(e, Exception) else Exception(e) def ok(result: Result[T, E]) -> T | None: match result: case Ok(v): if v is None: warnings.warn("ok was called with a None result", RuntimeWarning) return v case _: return None … # all Result methods can be implemented like that ```