python函数调用堆栈过程_python笔记_查看函数调用栈的一个小技巧

一、背景

最近在看一个开源框架的源码,涉及到的内容非常杂乱,有的函数不知道是在什么时候被谁给调用了?调用的时候传入了什么参数?为了解决这个问题,写了一个小的装饰器。

二、实现

这个装饰器函数主要参考了logging模块中的findCaller,源码如下:

1 deffindcaller(func):2 def wrapper(*args,**kwargs):3 importsys4 f=sys._getframe()5 filename=f.f_back.f_code.co_filename6 lineno=f.f_back.f_lineno7 print '######################################'

8 print 'caller filename is',filename9 print 'caller lineno is',lineno10 print 'the passed args is',args,kwargs11 print '######################################'

12 func(*args,**kwargs)13 return wrapper

只要加上这个装饰器,就能在调用函数前看到这个函数被哪个文件中的第几行调用,并且传入的参数是什么。例子如下:

1 #caller.py

2 from class_A importA3 a1=A()4 a2=A(1)5 a3=A(2)6 a2.func(3)7

8 #class_A.py

9 classA(object):10 def __init__(self,num=0):11 printnum12 @findcaller13 def func(self,num=None):14 printnum15

16 #执行caller,得到结果如下:

17 ######################################

18 caller filename iscaller.py19 caller lineno is 5

20 the passed args is (, 3) {}21 ######################################

可以看到是caller.py中的第5行a2.func(3)调用到了func函数,传入参数是3.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值