errortools - a toolset for working with Python exceptions and warnings and logging.
Project description
errortools
A lightweight Python exception handling utility library.
Installation
Use pip...
pip install errortools
...or uv
uv add errortools
Features
- Suppress:
ignore(),super_fast_ignore(),@suppress()— silence exceptions gracefully - Retry & Timeout:
@retry(),@timeout()— auto retry with delay, async timeout - Raise & Convert:
raises(),reraise(),@convert()— batch raise, type conversion - Catch & Collect:
super_fast_catch(),ExceptionCollector— inspect or batch exceptions - Caching:
@error_cache— LRU exception cache, likefunctools.lru_cache - Custom Exceptions:
PureBaseException,ContextException,BaseErrorCodes - Logging: structured logger with sinks, context binding, and exception capture
Quick Start
from errortools import ignore, retry, reraise, error_cache, suppress, convert
from errortools.future import super_fast_ignore, super_fast_catch, ExceptionCollector
# ── Suppress ─────────────────────────────────────────────────
with ignore(KeyError) as err: # full metadata
_ = {}["missing"]
# err.be_ignore=True, err.name='KeyError', err.traceback=...
with super_fast_ignore(ValueError): # zero-overhead
int("bad")
@suppress(ZeroDivisionError, default=0) # decorator form
def divide(a, b): return a / b
# ── Retry ────────────────────────────────────────────────────
@retry(times=3, on=ConnectionError, delay=1.0)
def connect(host: str): ...
# ── Convert ──────────────────────────────────────────────────
@convert(KeyError, ValueError) # decorator
def lookup(d, key): return d[key]
with reraise(KeyError, ValueError): # context manager
raise KeyError("x") # → ValueError
# ── Catch & Collect ──────────────────────────────────────────
with super_fast_catch(ValueError) as ctx:
raise ValueError("oops")
# ctx.exception → ValueError('oops')
collector = ExceptionCollector()
collector.catch(int, "bad1")
collector.catch(int, "bad2")
collector.raise_all() # → ExceptionGroup
# ── Cache ────────────────────────────────────────────────────
@error_cache(maxsize=64)
def load(uid: int):
if uid < 0: raise ValueError(f"invalid: {uid}")
return {"id": uid}
Custom Exceptions
from errortools import PureBaseException, ContextException, BaseErrorCodes
class AppError(PureBaseException):
code = 9000
default_detail = "Application error."
err = ContextException("failed").with_context(service="db")
raise BaseErrorCodes.not_found("user #42") # NotFoundError [3001]
Logging
from errortools.logging import logger
logger.info("Server started on port {}", 8080)
logger.add("app.log", rotation=10_485_760, retention=5)
with logger.catch():
int("not a number") # logged + suppressed
Documentation
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
errortools-3.4.0.tar.gz
(54.5 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file errortools-3.4.0.tar.gz.
File metadata
- Download URL: errortools-3.4.0.tar.gz
- Upload date:
- Size: 54.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
525dee34e293d7b4f6096306f5a841fbfd453413ba7a4014935c9cb8624b0b9c
|
|
| MD5 |
3af62a67d3ded88431eb267a1fd2c3fb
|
|
| BLAKE2b-256 |
f11787f74fce06b543b7989fd36beb48b7e441bf4691618bf1320c9a3554478e
|
File details
Details for the file errortools-3.4.0-cp314-cp314-win_amd64.whl.
File metadata
- Download URL: errortools-3.4.0-cp314-cp314-win_amd64.whl
- Upload date:
- Size: 74.5 kB
- Tags: CPython 3.14, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c06e613677aa17bddcd839739d34c0ca8fa18e2d3c8199386d79ab027ea7d3b8
|
|
| MD5 |
7ed89c5ec8c048ab6ea61dd6f5182575
|
|
| BLAKE2b-256 |
2a53fd2c0174701a7d328b2b783fc72f6a7c05053f789291dc1276e4b9e7b631
|