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
Result
class 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
Result
class andtraceback.format_exc
for tracebacksfrom unless.result import Result from traceback import format_exc # Optional
-
Integrate
Result
into your function-
Initialize the
Result
class (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
value
property of theResult
class to set return value
# <initialized>.value = <value to return> to_return.value = [1, 2, 3]
- Use
-
Catch and set errors
- Use
error
property of theResult
class 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
value
propertycalled = my_function() called.value
-
See error using the
error
propertycalled.error
-
Or better yet, use the
unless
methodcalled = 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
unless
method - Your handler function must accept at least 1 argument
- If you're using
Result.from_func
or 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 |