Python equivt of __FILE__ and __LINE__
Jeff Schwab
jeff at schwabcenter.com
Tue Feb 12 13:20:12 EST 2008
Gabriel Genellina wrote:
> En Tue, 12 Feb 2008 14:41:20 -0200, Jeff Schwab <jeff at schwabcenter.com>
> escribi�:
>
>> def line():
>> try:
>> raise Exception
>> except:
>> return sys.exc_info()[2].tb_frame.f_back.f_lineno
>> def file():
>> return inspect.currentframe().f_code.co_filename
>
> It's not a good idea to shadow the file type; I'd suggest current_file
> and current_line.
>
> file() should return inspect.currentframe().f_back.f_code.co_filename,
> else you're using the filename for file() itself, not the caller's
Both excellent points.
> And why the assymetry? Using try/except might help Jython, but that
> should be an implementation detail of inspect.currentframe() anyway.
> line() should just return inspect.currentframe().f_back.f_lineno
I suspect that Alain was just showing two ways to accomplish the same
end, since he was giving a purely didactic example. I dumbly copied his
code.
What about the following? Should the underscores be omitted from the
method names, for consistency with inspect?
# srcinfo.py
import inspect
import sys
def currentline():
return inspect.currentframe().f_back.f_lineno
def currentfile():
return inspect.currentframe().f_back.f_code.co_filename
# client.py
import srcinfo
import sys
debug = '-d' in sys.argv
# ...
if debug:
print('reached %s:%d' %
(srcinfo.currentfile(), srcinfo.currentline()))
More information about the Python-list
mailing list