本帖最后由 shenzhenwan10 于 2016-11-1 11:53 编辑

BUG有2种:

第一种,直接造成了错误,程序抛了个异常

  这种情况可以使用IPython, 抛出异常时自动把你带到 IPython Shell

第二种:隐藏BUG,也就是并没有报错,但是输出不符合预期
一般使用如下三个方法:
  • 抛异常。直接让你想要调试的位置让它先跑个异常,比如Flask的DEBUG的模式下,werkzeug里面的DebuggedApplication就会把Web页面渲染成一个可调试和可执行的环境,直接进行调试。
  • 在对应位置使用print和logging。这是最基础的玩法。
  • 自己维护一些用于调试的库。我会把工作中常用到的、有用的一些函数、方法搜集起来,放在一个库里。其中有个获取调用栈的函数类似这样:
  1. import sys
  2. def get_cur_info():
  3.     print sys._getframe().f_code.co_filename  # 当前文件名
  4.     print sys._getframe(0).f_code.co_name  # 当前函数名
  5.     print sys._getframe(1).f_code.co_name # 调用该函数的函数的名字,如果没有被调用,则返回module
  6.     print sys._getframe().f_lineno # 当前行号
复制代码

可以通过看当前上下文的调用栈的输出来帮助你揪出那个隐藏的「虫」




举报 使用道具
| 回复

共 1 个关于本帖的回复 最后回复于 2016-11-1 12:01

沙发
Fuller 管理员 发表于 2016-11-1 12:01:27 | 只看该作者
好经验。希望看到更多分享
举报 使用道具
您需要登录后才可以回帖 登录 | 立即注册

精彩推荐

  • Gephi社会网络分析-马蜂窝游记文本分词并同
  • Gephi社会网络分析-基于马蜂窝游记文本以词
  • 知乎话题文本根据词语间距筛选后生成共词矩
  • 马蜂窝游记文本分词后以词语间距为筛选条件
  • 学习使用apriori算法挖掘关联关系

热门用户

GMT+8, 2024-4-23 19:22