Home > Backend Development > Python Tutorial > Python 程序如何高效地调试?

Python 程序如何高效地调试?

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Release: 2016-06-06 16:22:00
Original
1832 people have browsed it

现在我在debug python程序就只是简单在有可能错误的地方print出来看一下,不知道python有没像c++的一些IDE一样有单步调试这类的工具?或者说各位python大神一般是怎么debug自己的python程序的?

回复内容:

这个要怒答一发。
应该用过 IPython 吧?想象一下,抛出异常时自动把你带到 IPython Shell 是不是很开心?而且和普通的IPython不同,这个时候可以调用 p (print), up(up stack), down(down stack) 之类的命令。还能创建临时变量,执行任意函数。

事实上这是可以实现的, 而且很简单,不过你要先安装 IPython。然后把以下代码保存为 `crash_on_ipy.py`
<span class="kn">import</span> <span class="nn">sys</span>

<span class="k">class</span> <span class="nc">ExceptionHook</span><span class="p">:</span>
    <span class="n">instance</span> <span class="o">=</span> <span class="bp">None</span>

    <span class="k">def</span> <span class="nf">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">instance</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
            <span class="kn">from</span> <span class="nn">IPython.core</span> <span class="kn">import</span> <span class="n">ultratb</span>
            <span class="bp">self</span><span class="o">.</span><span class="n">instance</span> <span class="o">=</span> <span class="n">ultratb</span><span class="o">.</span><span class="n">FormattedTB</span><span class="p">(</span><span class="n">mode</span><span class="o">=</span><span class="s">'Plain'</span><span class="p">,</span>
                 <span class="n">color_scheme</span><span class="o">=</span><span class="s">'Linux'</span><span class="p">,</span> <span class="n">call_pdb</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">instance</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>

<span class="n">sys</span><span class="o">.</span><span class="n">excepthook</span> <span class="o">=</span> <span class="n">ExceptionHook</span><span class="p">()</span>
Copy after login
想要类gdb的功能,可以使用pdb,例如:

import pdb
pdb.set_trace()

将上面2行加入到需要加断点的代码处,运行时,执行在此处即可中断,单步、继续、查看变量值等功能都有,不妨help下。 推荐PyCharm
不错的IDE,designed for python~ ,支持win,linux,maxos
支持断点调试,自带连接器(GitHub,Mantis,Jira,Bugzilla)
如果不考虑多语言混合编程,优于eclipse。
界面如下图:
Python 程序如何高效地调试?
个人使用体验不错,不过在macos系统下,配置interpreter要稍微折腾下。
官网传送门:jetbrains.com/pycharm/ Python 程序如何高效地调试?
一图胜千言,左上是调用栈,右上是变量值,底部是当前运行到那行代码,比print之类的调试方式效率高太多了。

用的是eclipse+pydev python -m pdb your.py 我最近使用了pudb,感觉比pdb的更加友好一些。linux下命令行安装很简单:
pip install pudb
Copy after login
常年print+type的路过~ 必须是ipython。调试程序的最佳时刻是程序出错的时候,有时候运行出了错误之后再调用调试器重现一遍可能错误又不能复现了,或者是再现错误需要很长的运行时间。而在ipython里运行程序可以在出错的第一时间进行调试,查看堆栈里的内容,绝对是方便之极。 试了下vs2015的py组件,感觉不比pycharm差 常年vim或者textmate. 调试print.dir, type等。再搞不懂就pdb..
Related labels:
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template