errortools - a toolset for working with Python exceptions and warnings and logging.
Project description
errortools
A lightweight Python exception handling utility library.
Something need change or refactor? Contact email errortools.docs@proton.me
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
Full docs: docs | License: LICENSE
Main email: errortools@proton.me Support email: errortools-support@proton.me Security email: errortools-security@proton.me Agents contact email: errortools.agent-preview@proton.me
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
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-4.0.0.tar.gz.
File metadata
- Download URL: errortools-4.0.0.tar.gz
- Upload date:
- Size: 121.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f8739c3c2bb88f3bcfa73039bc00d383a42b42e45ef7de77977d560d4821adbd
|
|
| MD5 |
ab66f6539fc7360db3846f9ae3336c5f
|
|
| BLAKE2b-256 |
6974073bbcedf14bb29e8e6096a291e7361c899c6051558ec293cec80a84726e
|
File details
Details for the file errortools-4.0.0-cp314-cp314-win_amd64.whl.
File metadata
- Download URL: errortools-4.0.0-cp314-cp314-win_amd64.whl
- Upload date:
- Size: 164.8 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 |
7ca7db52b5a7caa5212f610de685117c620f7edbfb84e8307d6430d020aee1e6
|
|
| MD5 |
1d518168d37f070893fdba5c2f3303f0
|
|
| BLAKE2b-256 |
1721767da137932b197e46848cb14572da2b7f0581056260f8b4389622c9c1bc
|