TangledHub Result
Project description
thresult
Overview
TangledHub library for handling returned values from functions/methods and handling errors.
Installation
pip install thresult
Examples
Traditional Python try-except example
def div(x: float, y: float) -> float:
z: float = x / y
return z
z0: float = div(1.0, 2.0) # 0.5
z1: float = div(1.0, 0.0) # raises "ZeroDivisionError: division by zero" exception
Manually create Result value, and Structural Pattern Matching
from thresult import Result, Ok, Err
def div(x: float, y: float) -> Result[float, Exception]:
res: Result[float, Exception]
try:
# can raise "ZeroDivisionError: division by zero" exception
z: float = x / y
res = Ok[float](z)
except Exception as e:
res = Err[Exception](e)
return res
r0: Result = div(1.0, 2.0) # Ok
r1: Result = div(1.0, 0.0) # Err
match r0:
case Ok(v):
print('Ok, value:', v)
case Err(e):
print('Err, error:', e) # "ZeroDivisionError: division by zero"
match r1:
case Ok(v):
print('Ok, value:', v)
case Err(e):
print('Err, error:', e) # "ZeroDivisionError: division by zero"
z0: float = r0.unwrap() # 0.5
z1: float = r1.unwrap_or(float('inf')) # inf
z1: float = r1.unwrap() # raises "ZeroDivisionError: division by zero" exception
Decorate function with Result, and Structural Pattern Matching
from thresult import Result, Ok, Err
@Result[float, Exception]
def div(x: float, y: float) -> float:
# can raise "ZeroDivisionError: division by zero" exception
z: float = x / y
return z
r0: Result = div(1.0, 2.0) # Ok
r1: Result = div(1.0, 0.0) # Err
match r0:
case Ok(v):
print('Ok, value:', v)
case Err(e):
print('Err, error:', e) # "ZeroDivisionError: division by zero"
match r1:
case Ok(v):
print('Ok, value:', v)
case Err(e):
print('Err, error:', e) # "ZeroDivisionError: division by zero"
z0: float = r0.unwrap() # 0.5
z1: float = r1.unwrap_or(float('inf')) # inf
z1: float = r1.unwrap() # raises "ZeroDivisionError: division by zero" exception
Using Result as context manager (with statement)
from thresult import Result, Ok, Err
@Result[float, Exception]
def div(x: float, y: float) -> float:
z: float = x / y
return z
try:
with div(1.0, 0.0) as z:
# unreachable
pass
except ZeroDivisionError as e:
# exception happened
pass
Decorate function with auto_unwrap and Result
from thresult import Result, Ok, Err, auto_unwrap
@auto_unwrap
@Result[float, Exception]
def div(x: float, y: float) -> float:
z: float = x / y
return z
z0: float = div(1.0, 2.0) # 0.5
z1: float = div(1.0, 0.0) # raises "ZeroDivisionError: division by zero" exception
Testing
docker-compose build thresult-test ; docker-compose run --rm thresult-test
Building
docker-compose build thresult-build ; docker-compose run --rm thresult-build
Licensing
thresult
is licensed under the BSD license.
Check the LICENSE for details
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
thresult-0.9.13.tar.gz
(5.2 kB
view hashes)
Built Distribution
Close
Hashes for thresult-0.9.13-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1b7dd6adae1ffddea170c3e66e8a0bf8b02ba278f171017546e1706b03b2f606 |
|
MD5 | ababcd6f8b6198a460ecf2375cfbdf2b |
|
BLAKE2b-256 | 27a20579b60019d5d84bae2de0812c31bdd603938b099cefe7b5717aabe0cf68 |