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.14.tar.gz
(5.7 kB
view hashes)
Built Distribution
Close
Hashes for thresult-0.9.14-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ad5503a1ccb8c0bdf3f76ce0619d6f694ab8fb4b378e36f905ef12cb5dec5f18 |
|
MD5 | 85dd2b78c6cacf473cec74c291f66cba |
|
BLAKE2b-256 | 59283fda05e2b3c14b67a7bcd8845dfd4d7385c80d9b583ffe7a5c50b5c3a3ca |