Introspect Python Stack Frames
Python is great at introspecting itself. But could a function introspectively know its caller? Answer: Yes, at least for CPython.
inspect.currentframe()
will do just that,
which simply calls sys._getframe(1)
.
sys._getframe
take an optional integer argument i
,
and returns the i
-th stack frame from the top.
(So 0
-th is yourself, 1
-th is your caller, and so on.)
Nevertheless, sys._getframe
is a CPython implementation detail,
and should not be expected to be supported in all Python implementations.
logging
module uses sys._getframe
for finding caller function’s name,
and it has a comment warning you that
in IronPython sys._getframe
might return None
.
In that case, logging
uses a trick for retrieving a stack frame:
It throws an exception and then immediately catches it,
and the traceback object will include a stack frame.