调试-有什么好的方法可以使我的Python代码首次运行?

我的代码中出现了很多错误。 因此,我希望能够在一开始就将它们最小化,或者在执行代码之前看到尽可能多的错误。 这可能吗,如果可以,我该怎么做?

Amara asked 2020-01-05T23:02:05Z

16个解决方案

35 votes

如果语法有问题,可以尝试使用语法突出显示的编辑器。 除非您有一种语言的感觉,否则简单的错误将不会突然出现。

调试的最简单形式是插入一些打印语句。 一种更高级(且可扩展)的方法是使用std lib中的日志记录模块。

交互式解释器是使用python代码的绝佳工具,而IPython是对内置REPL(读取Eval打印循环)的一项重大改进。

如果您确实想逐步执行代码,则python调试器称为pdb,可以从命令行调用它,也可以将其嵌入代码中。

如果您习惯使用完全集成的IDE,我建议您将Eclipse与pydev一起使用,并且PyCharm具有出色的商业功能,其中包括自动完成功能,快速访问文档以及众多快捷方式以及许多其他有趣的功能。

JimB answered 2020-01-05T23:02:33Z

30 votes

以下是一些有助于在Python中进行调试的技术:

使用交互式外壳程序,例如ipython。 Python是一种动态语言,您可以在键入时浏览代码。 Shell始终在我的编辑器的第二个窗口中运行。

从外壳程序复制粘贴到文档字符串中的代码说明了该函数(类,模块)的主要用法和特殊情况。 放在if __name__=="__main__"部分中的print()允许测试模块中的所有文档字符串。 doctest可以与unittest轻松集成。

将print()用于永远不会发生的事情。

print()可以解决许多调试问题; 日志记录模块适用于长期存在的python进程。

编写测试(不一定在代码之前),经常运行它们(自动或最多一次按键); 鼻子为单元测试提供扩展的测试发现和运行功能。

偶尔跑pylint。

此时,正式的python调试器几乎没有用。如果需要,Winpdb是一个外部多平台GPL'ed GUI python调试器。

jfs answered 2020-01-05T23:03:25Z

15 votes

所有真正酷的东西都可以在交互式解释器中轻松演示。 我认为这可能是良好设计的“黄金标准”:

您可以互动地上课吗?

如果您可以交互地进行工作,则可以放心地编写可测试,简单,可靠的单元测试和文档测试。

而且,更重要的是,您可以进行交互式浏览。 键入代码并确切地看到发生了什么事,没有比即时满足更好的了。

可以保留已编译的语言习惯(编写一堆东西,调试一堆东西,测试一堆东西)。 相反,您可以编写一些内容,进行探索,编写正式的测试,然后将您的一些内容附加到不断发展的最终项目中。

您仍然要进行总体设计。 但是,您不必浪费时间来编写可能有效或无效的代码。 在Python中,您可以编写有效的代码。 如果不确定,则可以交互地玩它直到确定。 然后,您编写有效的代码。

S.Lott answered 2020-01-05T23:04:08Z

10 votes

我是python的新手,并且一直在尝试几种不同的调试器。 到目前为止,这是我遇到的选项:

带有Pydev的Eclipse-如果您已经在使用eclipse,这可能是解决之道。 调试器运行良好,并且功能强大。

Komodo IDE-轻量级的Python IDE。 基本上是文本编辑器+调试器。 找出并立即产生成果真的很容易。

WinPDB-尝试下一个。 看起来很有特色,我可以使用选择的任何编辑器。

PDB-自从我阅读了有关WinPDB如何更好的替代方法以来,还没有尝试过。

使用%run命令的Ipython-我使用过IPython,但没有像这样的调试器。 我需要尝试一下。 (感谢小费,EOL)

Eric IDE-也在列表中尝试。

老式打印,断言-简单,有用,但不是完整的解决方案。

内存调试-为了调试内存问题,我遇到了一些工具:

objgraph-将生成png的参考图。 整齐。 还有其他功能,例如:import objgraph; print(objgraph.show_most_common_types(limit = 10))将打印内存中最常见的10种类型。

gc模块-直接与垃圾收集器进行交互。

笨重-堆分析器。 例如:从guppy import hpy; hp = hpy(); print(hp.heap())将打印最常见的类型,其内存使用情况等。

这是一个非常不完整的列表,但希望它是一个好的开始。

scottm answered 2020-01-05T23:05:22Z

10 votes

Python提供了一个调试器,您可以通过它调试代码,检查变量并进行操作。 请参阅[http://pythonconquerstheuniverse.wordpress.com/category/python-debugger/],该指南可以指导您进行操作...

还要检查python标准库参考中的pdb[http://www.python.org/doc/2.5.2/lib/module-pdb.html]

Amit answered 2020-01-05T23:05:47Z

7 votes

尽早测试并经常测试。

这并不一定意味着首先要进入测试驱动的设计池(尽管这不是一个坏主意)。 这只是意味着,只要有可用的东西,就测试您的对象和方法。 在进行测试之前,请不要等到拥有大量代码。

花一些时间来学习测试框架。 如果您键入测试用例很简单,那么您很有可能会这样做。 如果您没有任何类型的框架测试,可能会很痛苦,因此请避免使用它。 因此,尽早养成良好的习惯,这样一来,您的问题就会减少。

Bryan Oakley answered 2020-01-05T23:06:17Z

7 votes

通常,我只使用一堆打印语句。

page = grabpage(url)

print "Page content:", page

print "page type():", type(page)

有时执行以下操作很有用:

debug = True

if debug: print "page content", page

..您可以通过将调试变量更改为False来快速禁用所有调试打印语句。

尽管在大多数情况下,打印调试会使您受益匪浅,但有时很难调试诸如循环或一系列if / else / try / except / etc之类的东西。 为此,允许单步执行代码并设置断点的调试器很有用。

winpdb myscript --arg 4 -b 4包含在Python中。 这是一个很好的简单教程。 您甚至可以执行一些操作,例如在运行时更改变量(本教程将介绍)。 可以在这里找到更长的教程

有一个非常不错的GUI等效pdb-Winpdb

基本上,您运行winpdb myscript --arg 4 -b 4,然后它将命令加载到终端中,在左侧显示您的代码,并带有当前,本地/全局变量(及其值)列表以及当前的调用堆栈。

然后,您可以通过单击“步骤”(或F6)来浏览代码。 F5运行代码。 如果单击行号旁边的行,它将设置一个断点,代码将在该断点处自动步进(当您按run键时)。

我发现它易于使用,并且具有许多其他增强功能(例如远程调试),因此您可以在要调试的应用程序中运行后端部分(rpdb2),然后将Winpdb连接到它(加密)。 在PDB中支持线程和其他有用的东西,您也可以访问类似pdb的控制台。

dbr answered 2020-01-05T23:07:14Z

6 votes

我使用此技巧将Python设置为在出现未捕获的异常时自动启动调试器。 这样,您可以轻松地检查程序的状态而无需太多的日志代码。 (此外,向我发送低吼通知。)

哦,这样,您可以通过添加以下代码在代码中创建一个断点

if answer == 42:

1/0

Michael Kuhn answered 2020-01-05T23:07:39Z

5 votes

自由地使用assert语句。

answered 2020-01-05T23:07:58Z

4 votes

在执行之前识别错误是静态检查/分析的领域。 我很幸运使用PyChecker进行Python代码的基本静态检查。

pycheesecake网站上有一个非常好的Python测试工具摘要。

Andrew Beyer answered 2020-01-05T23:08:23Z

4 votes

Eclipse的PyDev插件是我选择的工具。 它可以识别简单的语法错误和缩进错误,并用红线强调该错误。 它具有强大的调试器,甚至还有一个名为PyLint的插件,它会警告您有关危险代码的信息。

编辑:它还具有关于运行时错误,部分自动完成和一些其他精美功能的用户友好堆栈跟踪。

再次编辑:我没有注意到在顶部文章中提到了pydev。 我希望我能带来一些其他好处。

Nailer answered 2020-01-05T23:08:52Z

1 votes

python -m pdb yourcode.py应该做到这一点。另外,您可以在代码中“导入pdb”,然后使用pdb.set_trace()设置断点。请参阅手册以获取更多信息:[http://www.python.org/doc/2.5.2/lib/module-pdb.html]

Sridhar Iyer answered 2020-01-05T23:09:13Z

1 votes

有一个非常不错的Python GUI调试器Winpdb。 试试看。建立在wxWidgets库和多平台上。

RobertVa answered 2020-01-05T23:09:33Z

1 votes

为了获得最全面的体验,您可以使用完整的IDE,例如PyCharm:

[http://blog.jetbrains.com/pycharm/files/2011/05/template-debug2.png]

aaimnr answered 2020-01-05T23:09:57Z

0 votes

Eric4 IDE还具有出色的内置调试器。

fccoelho answered 2020-01-05T23:10:17Z

0 votes

IPython Python Shell具有%run命令,该命令在出现问题时会自动调用调试器。 然后,您可以检查变量,单步执行代码等。

您可以使用%run命令从IPython运行程序。

更普遍地说,就像其他答案中提到的那样,一个好的Python shell是您的朋友。 IPython是您最好的朋友。 :)

Eric O Lebigot answered 2020-01-05T23:10:46Z

python可以调试吗_调试-有什么好的方法可以使我的Python代码首次运行?相关推荐

  1. python无向加权图_图:无向图(Graph)基本方法及Dijkstra算法的实现 [Python]

    一般来讲,实现图的过程中需要有两个自定义的类进行支撑:顶点(Vertex)类,和图(Graph)类.按照这一架构,Vertex类至少需要包含名称(或者某个代号.数据)和邻接顶点两个参数,前者作为顶点的 ...

  2. keil 调试 操作系统_调试操作系统:内存分配的经验教训

    keil 调试 操作系统 It began, as so many investigations do, with a bug report. 和许多调查一样,它是从一个错误报告开始的 . The n ...

  3. python商城源码_腾讯大佬用了12小时讲完的Python,整整400集,拿走不谢

    Python在近几年越来越受追捧,很多童鞋或者职场小伙伴想要提升技能-学习Python. 这是非常好的事情,但问题在于很多人不知道学Python做什么,所以什么零碎细末.艰难晦 涩.长篇大论的都去看, ...

  4. 运维学python用不上_作为运维你还在想要不要学Python,看完这篇文章再说!

    原标题:作为运维你还在想要不要学Python,看完这篇文章再说! 本文由马哥教育Python自动化实战班5期学员推荐,转载自简书,作者为Li.Yingjie,内容略经小编改编和加工,观点跟作者无关,最 ...

  5. 用python实现bt下载_【图片】分享一段功能非常简陋的python代码实现下载free种【pt吧】_百度贴吧...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 ##### class Torrents(): ''' Define a torrent ''' def __init__(self,torrent): ...

  6. python 自动化框架打包_听说很多人都不会打包,教你Python实现前端自动化打包部署!...

    作为一名专职前端开发的我,为了帮助解决目前工作中的一些繁琐的工作(主要是处理 excel数据),解放程序员双手,前阵子就刚刚入了 python 的坑,毕竟也算是门工具语言,都已经加入少儿编程了,哈哈哈 ...

  7. python布尔测试对象_面试题十九期-测试开发面试题之python系列-这个中~

    坚持梦想 就算所有人都不支持你.这条路会很曲折,你也会一度认为是不是自己选错了,但只要坚持,就算最后没有成功,但努力了就不会有遗憾. 测试开发python系列面试题 01 单选题 1.下列哪个语句在P ...

  8. python大家都会吗_一篇告诉你为什么人人都应该学点Python?

    全文主要分为以下四个部分,各位看官可以自行选择阅读,写文的目的是希望大家能在学习了解Python的同时能在日常生活中运用上,若有补充,欢迎在评论区留言.本文默认已经安装好Python 2.7环境,需要 ...

  9. python vb 哪个好学_最难学的七大编程语言,VB 第一,Python垫底,看你学的排第几...

    原标题:最难学的七大编程语言,VB 第一,Python垫底,看你学的排第几 在很多人眼里程序员的标配就是黑框眼镜+格子衫+双肩包+牛仔裤+运动鞋,拥有了这些可能就被判定为一个程序员. 而如何判定一个程 ...

最新文章

  1. 网页编程的过程中,怎样让改变标签的属性
  2. 滨州学院计算机自荐考试题型,滨州学院2004—2005学年第一学期期末考试计算机科学教育专业02级《数据库原理》试题及答案(3份,另附习题集)...
  3. [JDK8] Stream
  4. python numpy读取数据_python使用numpy读取、保存txt数据的实例
  5. 异或运算交换两个整数
  6. OSPF——虚链路详解(含配置命令)
  7. HTML5超级玛丽简易版(有源码)
  8. linux关于管道通信,球热心人帮忙 关于linux环境下管道通信
  9. Linux双网卡下的网络故障排查
  10. linux实现wifi中继,树莓派Wifi中继
  11. 【Matlab绘图要点汇总】Matlab图中添加图例+添加轴标签+添加文本+添加注释
  12. 烽火2640路由器命令行手册-01-基础配置命令
  13. 学习Java的第六天:for循环,while循环,do-while循环
  14. VMware+Ubuntu安装使用说明
  15. javacv 视频转音频(提取视频中音频)
  16. 如何将excel表格导入word_word办公技巧:如何让Excel与Word文档数据同步
  17. 几种趋势指标的测试结论
  18. 水果生鲜网上商城系统开发成品案例
  19. 抵御“黄貂鱼”攻击,谷歌使出禁用2G“大招”
  20. 计算机思维入门kodu建模观后感,Kodu Game Lab少儿编程软件 v1.5.49.0 最新版

热门文章

  1. java 随机数 分布_java – 随机数的分布
  2. 栈子系统c语言,数据结构(栈子系统:c实现)
  3. java 只读数组_在Java 8中创建方法引用数组的速记方法?
  4. mysql php查询错误_php查询mysql数据库错误
  5. 四种python 单继承的实现方式
  6. Python基础教程:字典和Json
  7. Python3-join()和split()的用法
  8. Python 内存分配时的小秘密
  9. VMware ubuntu 虚拟机只剩下lo回环网卡,上不了网(无法上网、无法连接网络)(环回)
  10. 为计算机系的学生建立视图,数据库及其应用2010年1月真题