Они хорошо работают для быстрого добавления минимальных средств отладки «где я», когда вы не хотите импортировать еще один модуль. (Только CPython, только для отладки.)
def LINE( back = 0 ):
return sys._getframe( back + 1 ).f_lineno
def FILE( back = 0 ):
return sys._getframe( back + 1 ).f_code.co_filename
def FUNC( back = 0):
return sys._getframe( back + 1 ).f_code.co_name
def WHERE( back = 0 ):
frame = sys._getframe( back + 1 )
return "%s/%s %s()" % ( os.path.basename( frame.f_code.co_filename ),
frame.f_lineno, frame.f_code.co_name )
Пример:
import sys, os # these you almost always have...
def WHERE( back = 0 ):
frame = sys._getframe( back + 1 )
return "%s/%s %s()" % ( os.path.basename( frame.f_code.co_filename ),
frame.f_lineno, frame.f_code.co_name )
def first():
second()
def second():
print WHERE()
print WHERE(1)
first()
Выход:
$ python fs.py
fs.py/12 second()
fs.py/9 first()