python 中如何实现类似C语言中 __FILE__, __LINE__, __FUNC__

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()









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值