Rumah > pembangunan bahagian belakang > Tutorial Python > Python 程序如何高效地调试?

Python 程序如何高效地调试?

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Lepaskan: 2016-06-06 16:22:00
asal
1830 orang telah melayarinya

现在我在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>
Salin selepas log masuk
想要类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
Salin selepas log masuk
常年print+type的路过~ 必须是ipython。调试程序的最佳时刻是程序出错的时候,有时候运行出了错误之后再调用调试器重现一遍可能错误又不能复现了,或者是再现错误需要很长的运行时间。而在ipython里运行程序可以在出错的第一时间进行调试,查看堆栈里的内容,绝对是方便之极。 试了下vs2015的py组件,感觉不比pycharm差 常年vim或者textmate. 调试print.dir, type等。再搞不懂就pdb..
Label berkaitan:
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan