撰写程序时候,需要在调试上面花费不少时间,好的调试工具可以让这个过程如虎添翼, 靠打 log 调试会是一种很痛苦的过程,我总结一下 Pylons 开发的调试技巧。
吐槽:团队开发时候,每个成员需要学习、总结和分享各自的开发技巧, 这样才能自我提升并提高开发效率。这属于团队文化建设,开发是一种艺术创造过程, 绝对不是简单的复制和粘帖。
在 Python 中调试
pdb
在代码中加入下列语句即可启用交互式调试。
1 | import pdb;pdb.set_trace() |
在 pdb 中,可以使用 h / l / b / n / s / c / j / a / p / ! / q 这些命令所代表的含义可以通过 h(elp) 打印出来。
参考链接:
ipdb
比 pdb 更好用的是 ipdb,需要预先安装 IPython,通过 IPython 可以提供更强的交互功能。
安装 ipdb: easy_install ipdb , 使用方法依然是 import ipdb;ipdb.set_trace() 。
ps: 根据我的测试,ipdb 0.61 不能和 ipython 0.91 正常工作, 会报 ImportError: No module named core.debugger 错误,请尝试使用 ipython 0.10 或者更新版本。这个错误在 ipdb 官网有 issue 描述 ()。
使用 embed python shell
除了特定代码的调试,有时候我们还需要在开发一个功能之前进行尝试性代码撰写, 这点在 web 开发时候尤其有用。托 Python 动态语言特性的福,我们可以很方便的使用 Interactivate Shell 进行开发。
在项目的根目录建立一个 Python 脚本,比如 shell.py ,其中代码如下:
04 | # desc: 这个shell提供Python上下文环境,方便调试 |
09 | # Do something for init here. |
11 | from IPython.frontend.terminal.embed import InteractiveShellEmbed |
12 | ipshell = InteractiveShellEmbed() |
16 | pyshell = code.InteractiveConsole(locals=locals()) |
19 | if __name__ == '__main__': |
这段代码先尝试使用 IPython 作为交互 shell,如果没有安装就使用原生 Python 作为 交互 Shell。(强烈建议使用 IPython)。
请在 main() 方法开始时候做一些初始化动作,比如载入 webapp 的实例并初始化各路config, 这样就能实现即时代码测试功能,提高开发效率,不用一遍遍地跑流程。
参考链接
- (注意, 这篇文章是2011年的,其中引入 IPython 的 InteractiveShellEmbed 的方法已经过期,请参考上面的代码)
GAE 中的 pdb
有一些特定系统,比如 GAE 和 nosetests,他们会重定向 std:in 和 std:out , 造成 pdb 无法正确输入和输出,在使用的使用,需要用以下代码做个 hack。
3 | for attr in ('stdin', 'stdout', 'stderr'): |
4 | setattr(sys, attr, getattr(sys, '__%s__' % attr)) |
Pylons 调试
Paster 的 Shell 交互式调试更显犀利(官方所称杀手级功能), 可以直接使用 paster shell dev.ini 命令启用交互界面,默认会先尝试载入 IPython,不存在就载入原生 Shell。
我当前使用的 Paster 版本为 1.7.5,无法正确识 IPython 0.11及以上版本, 请使用0.9.1或者0.10。
参考链接:
版权所有 © 2010 转载本站文章请注明: 转载自
原文链接:
您可以随意地转载本站的文章,但是必须在醒目位置注明来源及本站链接,不可以将本站文章商业化使用,或者修改、转换或者以本作品为基础进行创作。
3a1ff193cee606bd1e2ea554a16353ee
阅读(889) | 评论(0) | 转发(0) |