1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
---- ---- ---- ---- ---- ---- ---- -- -- --- --- --- --- --- --- ------- ------- ------- | """An error-handling model influenced by that used by the Rust programming language ---- ---- ---- ---- ---- ---- ---- -- -- --- --- --- --- --- --- ------- ------- ------- | ---- ---- ---- ---- ---- ---- ---- -- -- --- --- --- --- --- --- ------- ------- ------- | See https://doc.rust-lang.org/book/ch09-00-error-handling.html. ---- ---- ---- ---- ---- ---- ---- -- -- --- --- --- --- --- --- ------- ------- ------- | """ ---- ---- ---- ---- ---- ---- ---- -- -- --- --- --- --- --- --- ------- ------- ------- | ---- ---- ---- ---- ---- ---- ---- -- -- --- --- --- --- --- --- ------- ------- ------- | from typing import Generic, TypeVar, Union ---- ---- ---- ---- ---- ---- ---- -- -- --- --- --- --- --- --- ------- ------- ------- | ---- ---- ---- ---- ---- ---- ---- -- -- --- --- --- --- --- --- ------- ------- ------- | T = TypeVar("T") ---- ---- ---- ---- ---- ---- ---- -- -- --- --- --- --- --- --- ------- ------- ------- | E = TypeVar("E", bound=Exception) ---- ---- ---- ---- ---- ---- ---- -- -- --- --- --- --- --- --- ------- ------- ------- | ---- ---- ---- ---- ---- ---- ---- -- -- --- --- --- --- --- --- ------- ------- ------- | ---- ---- ---- ---- ---- ---- ---- 02 -- --- --- --- --- --- --- ------- ------- ------- | class Ok(Generic[T]): 0002 0002 0002 0000 0000 0000 0000 02 01 000 000 000 000 000 000 0000.00 0000.00 0000.00 | def __init__(self, value: T) -> None: 0002 0002 0002 0000 0000 0000 0000 02 01 000 000 000 000 000 000 0000.00 0000.00 0000.00 | self._value = value ---- ---- ---- ---- ---- ---- ---- 02 -- --- --- --- --- --- --- ------- ------- ------- | 0002 0002 0002 0000 0000 0000 0000 02 01 000 000 000 000 000 000 0000.00 0000.00 0000.00 | def ok(self) -> T: 0002 0002 0002 0000 0000 0000 0000 02 01 000 000 000 000 000 000 0000.00 0000.00 0000.00 | return self._value ---- ---- ---- ---- ---- ---- ---- -- -- --- --- --- --- --- --- ------- ------- ------- | ---- ---- ---- ---- ---- ---- ---- -- -- --- --- --- --- --- --- ------- ------- ------- | ---- ---- ---- ---- ---- ---- ---- 02 -- --- --- --- --- --- --- ------- ------- ------- | class Err(Generic[E]): 0002 0002 0002 0000 0000 0000 0000 02 01 000 000 000 000 000 000 0000.00 0000.00 0000.00 | def __init__(self, e: E) -> None: 0002 0002 0002 0000 0000 0000 0000 02 01 000 000 000 000 000 000 0000.00 0000.00 0000.00 | self._e = e ---- ---- ---- ---- ---- ---- ---- 02 -- --- --- --- --- --- --- ------- ------- ------- | 0002 0002 0002 0000 0000 0000 0000 02 01 000 000 000 000 000 000 0000.00 0000.00 0000.00 | def err(self) -> E: 0002 0002 0002 0000 0000 0000 0000 02 01 000 000 000 000 000 000 0000.00 0000.00 0000.00 | return self._e ---- ---- ---- ---- ---- ---- ---- -- -- --- --- --- --- --- --- ------- ------- ------- | ---- ---- ---- ---- ---- ---- ---- -- -- --- --- --- --- --- --- ------- ------- ------- | ---- ---- ---- ---- ---- ---- ---- -- -- --- --- --- --- --- --- ------- ------- ------- | Result = Union[Ok[T], Err[E]]