@trace¶
Logs a function's arguments and return value, or the exception it raised. Purely observational: it never catches or suppresses exceptions, they always propagate exactly as they would without the decorator.
from pedros import trace
@trace
def add(x, y):
return x + y
add(1, 2)
# Logs (DEBUG): "calling add(args=(1, 2), kwargs={})"
# Logs (DEBUG): "add returned 3"
@trace logs at DEBUG by default, which stays silent unless you've
raised pedros's verbosity, see the
logging guide.
On an exception, it logs the exception instead of the return value, then re-raises:
@trace
def risky():
raise ValueError("boom")
risky()
# Logs (DEBUG): "calling risky(args=(), kwargs={})"
# Logs (DEBUG): "risky raised ValueError: boom"
# ... then ValueError propagates normally
Options¶
log_level: level used for the call/return/error trace, or"NONE"to disable tracing entirely (default:"DEBUG")
Combining with @safe¶
@trace never suppresses exceptions, so it composes cleanly with @safe
when you want both a full call/return/error trace and error handling: