I want to create some kind of debugging output for python and want to pass the functionname to another function for output.
The only reasonable way I found to do so was:
def foobar():
print 'hello world'
print foobar.__name__
is there something that does the same thing for the current function to improve copy and pasting of that line?
like the C equivalent printf("%s", __func__)
.
One thing you could try is to create a decorator that does this:
def traceme(func):
def newfunc(*args, **kwargs):
ret = func(*args, **kwargs)
print func.__name__
return ret
return newfunc
@traceme
def foobar():
print 'hello world'
sys._getframe can do that:
import sys
def foobar():
print sys._getframe().f_code.co_name
Well, yes, there is a way...
print sys._getframe().f_code.co_name
You can even make it a function (getting the name of the previous frame):
def function_name():
return sys._getframe().f_back.f_code.co_name
Silly example just to show that it works:
>>> def bar():
... return function_name()
...
>>> bar()
'bar'
(Note that the decorator shown in Krumelur's answer is a much better solution to the problem, but it is possible to do what you want in Python =)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With