在Java/ c#中,您可以很容易地逐级检查代码以跟踪可能出错的地方,而IDE使这个过程对用户非常友好。

你能以类似的方式跟踪python代码吗?


当前回答

PyCharm是一个包含调试器的Python IDE。观看这段YouTube视频,了解如何使用它来逐步执行代码:

PyCharm教程-使用PyCharm调试python代码(在6:34开始调试)

注意:PyCharm是一个商业产品,但该公司确实为学生和教师提供了免费的许可证,以及一个“轻量级”社区版本,它是免费和开源的。

其他回答

你可以选择带PTVS的VisualStudio: http://www.hanselman.com/blog/OneOfMicrosoftsBestKeptSecretsPythonToolsForVisualStudioPTVS.aspx

从Python 3.7开始,你可以使用breakpoint()内置函数进入调试器:

foo()
breakpoint()  # drop into the debugger at this point
bar()

默认情况下,breakpoint()将导入pdb并调用pdb.set_trace()。但是,你可以通过sys.breakpointhook()和使用环境变量PYTHONBREAKPOINT来控制调试行为。

有关更多信息,请参阅PEP 553。

在python中有一个叫做'pdb'的模块。在python脚本的顶部

import pdb
pdb.set_trace()

然后进入调试模式。您可以使用's'步进,'n'跟随下一行,类似于使用'gdb'调试器。

是的!有一个名为pdb的Python调试器就是用来做这件事的!

可以使用pdb myscript.py或Python -m pdb myscript.py通过pdb启动Python程序。

然后可以发出一些命令,这些命令都记录在pdb页面上。

要记住的一些有用的方法是:

B:设置断点 C:继续调试,直到遇到断点 学生:按步骤执行代码 N:转到下一行代码 L:列出当前文件的源代码(默认为11行,包括正在执行的行) U:向上导航堆栈帧 D:向下浏览堆栈帧 P:在当前上下文中输出表达式的值

如果你不想使用命令行调试器,一些IDE,如Pydev, Wing IDE或PyCharm有一个GUI调试器。Wing和PyCharm都是商业产品,但Wing有一个免费的“个人”版本,PyCharm有一个免费的社区版本。

使用Python交互式调试器'pdb'

第一步是使Python解释器进入调试模式。

A.从命令行

最直接的方式,从命令行运行,python解释器

$ python -m pdb scriptName.py
> .../pdb_script.py(7)<module>()
-> """
(Pdb)

B.解释器内部

在开发模块的早期版本时,并更迭代地进行实验。

$ python
Python 2.7 (r27:82508, Jul  3 2010, 21:12:11)
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import pdb_script
>>> import pdb
>>> pdb.run('pdb_script.MyObj(5).go()')
> <string>(1)<module>()
(Pdb)

C.从你的程序内部

对于大项目和长时间运行的模块,可以从程序内部使用启动调试 导入PDB和set_trace() 像这样:

#!/usr/bin/env python
# encoding: utf-8
#

import pdb

class MyObj(object):
    count = 5
    def __init__(self):
        self.count= 9

    def go(self):
        for i in range(self.count):
            pdb.set_trace()
            print i
        return

if __name__ == '__main__':
    MyObj(5).go()

逐步调试进入更内部

Execute the next statement… with “n” (next) Repeating the last debugging command… with ENTER Quitting it all… with “q” (quit) Printing the value of variables… with “p” (print) a) p a Turning off the (Pdb) prompt… with “c” (continue) Seeing where you are… with “l” (list) Stepping into subroutines… with “s” (step into) Continuing… but just to the end of the current subroutine… with “r” (return) Assign a new value a) !b = "B" Set a breakpoint a) break linenumber b) break functionname c) break filename:linenumber Temporary breakpoint a) tbreak linenumber Conditional breakpoint a) break linenumber, condition

注意:**所有这些命令都应该在**pdb中执行

更深入的了解请参考:-

https://pymotw.com/2/pdb/

https://pythonconquerstheuniverse.wordpress.com/2009/09/10/debugging-in-python/