Lightweight python library for error handling
Project description
Unless
Unless is a lightweight python library designed to simplify error handling. It introduces the Result class that encapsulates the result of a function call, which can be either the return value, an error, or both.
Install
pip3 install unless-handler
Usage
💡 Remember
Resultclass has 2 properties and 1 method,
Properties
value- The return value of the functionerror- Information about the error if there was any
- It can be either a tuple of the exception type and traceback string, or just the traceback string
Methods
unless- Handle errors and return thevalue
-
Import the
Resultclass andtraceback.format_excfor tracebacksfrom unless.result import Result from traceback import format_exc # Optional
-
Integrate
Resultinto your function-
Initialize the
Resultclass (specify the return type for type hints)def cool(): to_return = Result[list]() ^ Return type
[list]is the return type of the function and is there so we can have type hints. It is OPTIONAL andResult()works too. -
Set the return value
- Use
valueproperty of theResultclass to set return value
# <initialized>.value = <value to return> to_return.value = [1, 2, 3]
- Use
-
Catch and set errors
- Use
errorproperty of theResultclass to set errors - You have the freedom to set any value you like; however, it is recommended to follow the given syntax of
<type>, <traceback>as it gives the ability to have caused exception type and the traceback for better error handling
try: ... except Exception as e: # <initialized>.error = <exception type>, <traceback.format_exc()> to_return.error = type(e), format_exc()
- Use
-
Return the result
return to_return
-
-
Calling your function
-
See result using the
valuepropertycalled = my_function() called.value
-
See error using the
errorpropertycalled.error
-
Or better yet, use the
unlessmethodcalled = my_function().unless() # called is now called.value and errors are handled using handler function # for more info check "Examples"
-
Examples
Basic usage
def cool():
to_return = Result[list]()
try:
to_return.value = [1, 2, 3]
raise ValueError("Annoying error...")
except Exception as e:
to_return.error = type(e), traceback.format_exc()
return to_return
# Calling the function
x = cool().unless()
print(x)
Custom error handling
You can call functions with custom error handling logic using Result.unless method that your function returns.
- You can pass any python function to the
unlessmethod - Your handler function must accept at least 1 argument
- If you're using
Result.from_funcor following the recommended syntax, the 1st argument will be a tuple consist of<type of exception>, <traceback string>
- If you're using
- Handler function can have keyword arguments (
x.unless(func, arg1="first", arg2="second"))
def custom_handler(e, notes):
_, fmt_traceback = e
logging.warn(f"{fmt_traceback} \n\nNotes: {notes}")
x = cool().unless(
custom_handler,
notes="Probably happend because the function was hot"
)
print(x)
Integrate with existing functions
You can use Result.from_func method to integrate this with existing functions.
- As a decorator,
@Result.from_func def older(n) -> list: return [1, 2, 3, n]
- As a function,
def older(n) -> list: return [1, 2, 3, n] x = Result.from_func(older, list, n=2) # Important: # if your function doesn't accept arguments, use "()" at the end to call it properly # Example: x = Result.from_func(no_args)() ^ Call the function
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
File details
Details for the file unless-handler-0.2.tar.gz.
File metadata
- Download URL: unless-handler-0.2.tar.gz
- Upload date:
- Size: 4.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
01f5438e1e945e43f1f55ed1de2dcde2b4db8fcaeef67ffb57ea357f3c3525d2
|
|
| MD5 |
239d0f715d46e8355a7caa2535dbda20
|
|
| BLAKE2b-256 |
67a18eb75dbda1ec4e28bcbc66e54da0f67f1c72d098dcb35591cb3772f102ef
|