C语言中 __FILE__, __LINE__, __FUNC__ 分别可以表示当前代码行的 文件名,行号,函数名,这对于调试代码 非常方便
python可以使用标准库inspect来实现标题所示功能
~~~~~~~~~~:~/prj$ cat temp.py
#-*- coding: utf-8 -*-
import inspect
def printLineFileFunc():
callerframerecord = inspect.stack()[1]
frame = callerframerecord[0]
info = inspect.getframeinfo(frame)
print info.filename # __FILE__
print info.function # __FUNCTION__
print info.lineno # __LINE__
def main():
printLineFileFunc()
main()
~~~~~~~~~~:~/prj$ python3 temp_v3.py
temp_v3.py
main
12
~~~~~~~~~:~/prj$
python2.7上也可以实现类似功能
补充一下:
由于info.filename是包含完整路径,所以字符串很长,于是 需要往往截取最后的文件名,可以这样
def printLineFileFunc():
callerframerecord = inspect.stack()[1] # 0代表当前行 , 1当前调用
frame = callerframerecord[0]
info = inspect.getframeinfo(frame)
filename = (info.filename[::-1])[0:info.filename[::-1].index('/')] #on linux
print("on func:"+ info.function + " at file:"+ filename[::-1] + " #" + str(info.lineno))
用rfind更加方便:
def printLineFileFunc():
callerframerecord = inspect.stack()[1] # 0代表当前行 , 1当前调用
frame = callerframerecord[0]
info = inspect.getframeinfo(frame)
filename = info.filename[info.filename.rfind('/')+1:]
print("on func:"+ info.function + " at file:"+ filename + " #" + str(info.lineno))
printLineFileFunc()