python 异常函数调用栈_python笔记_查看函数调用栈的一个小技巧

一、背景

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

二、实现

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

def findcaller(func):

def wrapper(*args,**kwargs):

import sys

f=sys._getframe()

filename=f.f_back.f_code.co_filename

lineno=f.f_back.f_lineno

print '######################################'

print 'caller filename is ',filename

print 'caller lineno is',lineno

print 'the passed args is',args,kwargs

print '######################################'

func(*args,**kwargs)

return wrapper

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

#caller.py

from class_A import A

a1=A()

a2=A(1)

a3=A(2)

a2.func(3)

#class_A.py

class A(object):

def __init__(self,num=0):

print num

@findcaller

def func(self,num=None):

print num

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

######################################

caller filename is caller.py

caller lineno is 5

the passed args is (, 3) {}

######################################

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

【每日一个小技巧】Python | input的提示信息换行输出,提示信息用变量表示

[每日一个小技巧]Python | input的提示信息换行输出,提示信息用变量表示 在书写代码的途中,经常会实现这样功能: 请输入下列选项前的序号: 1.选择1 2.选择2 3.选择3 在pytho ...

快速掌握iOS API的一个小技巧

快速掌握iOS API的一个小技巧 周银辉 iOS SDK和Developer Library中提供了各个类以及函数的帮助文档,这很棒,但要想了解整个库的大体结构(比如UIKit下有哪些类,他们的继承 ...

【flash】关于flash的制作透明gif的一个小技巧

关于flash的制作透明gif的一个小技巧 或者说是一个需要注意的地方 1.导出影片|gif,得到的肯定是不透明的.2.想要透明背景,必须通过发布.3.flash中想要发布gif动画的话,不能有文字, ...

Linux查看History记录加时间戳小技巧

Linux查看History记录加时间戳小技巧 熟悉bash的都一定知道使用history可以输出你曾经输入过的历史命令,例如[root@servyou_web ~]# history | more ...

POJ-3262 贪心的一个小技巧

Protecting the Flowers Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 3204   Accepted: ...

Python笔记_第四篇_高阶编程_再议装饰器和再议内置函数

1. 概述: 我们在前面用了很多的装饰器这个工具的方法.这个位置要系统的讲一下装饰器. 1.2 为什么需要装饰器. 装饰器本质是一个Python函数,它可以让其他函数在不需要任何代码变动的前提下增加额 ...

Android 性能优化(24)*性能工具之「Traceview,dmtracedump」Profiling with Traceview and dmtracedump :记录并查看函数调用栈*

Profiling with Traceview and dmtracedump In this document Traceview Layout         Traceview工具界面介绍 T ...

Python笔记_第三篇_面向对象_4.单下划线和双下划线

说道这里我们需要稍微暂停一下.前面我们说到了类是作为一个对象存放容器.这个容器里面有属性和方法.最好的理解类的方式就是把类想想成一个容器. 然后构造了一个析构函数和构造函数,然后又对object和se ...

JavaScript 查看函数调用栈

1.调用栈 js中的this与函数调用栈密切相关.  this实在函数调用时发生的绑定,它指向完全取决于函数在哪里被调用.    2.示例

随机推荐

[Q&A] 应用程序清单生成失败

当在 Silverlight 客户端属性里(如下图),添加"允许在浏览器外运行应用程序"和"在浏览器内运行时需要提升的信任"时, 图1 目录下会自动生成如下两个 ...

asp.net数据控件遍历 获取当前索引

Gridview 数据访问遍历1.for遍历for (int i = 0; i <= GridView1.Rows.Count - 1; i++)//为gv的每一行增加js事件{   TextB ...

linux内核启动笔记

一. 1.解压    tar xjf linux-2.6.22.6.tar.bz2 2.打补丁  patch -p1 < ../linux-2.6.22.6_jz2440.patch 3.配置 ...

MAC安装JDK及环境变量配置

1.访问Oracle官网 http://www.oracle.com,浏览到首页的底部菜单 ,然后按下图提示操作: 2.点击“JDK DOWNLOAD”按钮: 3.选择“Accept Lisence ...

判断以及防止SQL注入

SQL注入是目前黑客最常用的攻击手段,它的原理是利用数据库对特殊标识符的解析强行从页面向后台传入.改变SQL语句结构,达到扩展权限.创建高等级用户.强行修改用户资料等等操作. 那怎么判断是否被SQL注 ...

记录flask使用模板时出现的&OpenCurlyDoubleQuote;Internal Server Error”错误

在看时照着书上的代码抄了一遍,然后运行时发现一直出现以下的错误 书上的源代码如下 watchlist.html

TCP长连接的一些事儿

1.TCP的特点以及与应用        TCP提供一种面向连接的.可靠的字节流服务.面向连接意味着两个使用TCP的应用(通常是一个客户和一个服务器)在彼此交换数据包之前必须先建立一个TCP连接.TC ...

CHtmlEditCtrl &lpar;2&rpar;&colon; Add a Source Text Editor to Your HTML Editor

In a previous article, I described how to create an HTML editor using the MFC CHtmlEditCtrl class in ...

python调用API

相信做过自动化运维的同学都用过API接口来完成某些动作.API是一套成熟系统所必需的接口,可以被其他系统或脚本来调用,这也是自动化运维的必修课. 本文主要介绍Python中调用API的几种方式,下面是 ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值