Python代码调试技巧教程详解

目录

关于代码调试的技巧,我之前写过很多的文章,加起来也有 将近 10 篇了,关注比较早的同学,也应该都有看过。

还没看过的同学,欢迎前往查阅:调试技巧

其中有一篇是关于 pdb 的调试技巧的:

里面介绍了两种 pdb 的调试入口,也是大部分所熟知的。

这里再带大家回顾一下

第一种:指定 -m pdb 来开启

$ python -m pdb pdb_demo.py

第二种:使用 pdb.set_trace() 在代码中设置断点

import pdb
pdb.set_trace()

但其实,pdb 还另外两种调试方法,第一种方法,可能有 99% 的开发者都没用过,甚至连见过都没有。

这两种方法,是配合 Python Console 的交互界面来实现的。

首先我准备好一个名为 utils.py 的 Python文件,里面定义了一个 sum 的工具函数(仅作演示用)。

def sum(*args):
    result = 0
    for arg in args:
        result += arg

    return result

然后在终端敲入 Python 进入 Console 的模式,导入这个模块,并调用 sum 函数,在正常情况下,函数可以正常工作。

>>> import utils
>>> utils.sum(1,2,3)
6

但如果你的参数类型传成了 str,函数就会报错啦~

>>> utils.sum(1,2,"3")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/MING/utils.py", line 4, in sum
    result += arg
TypeError: unsupported operand type(s) for +=: 'int' and 'str'

由于这里的报错是我刻意触发的,从报错来看,是很容易定位的。

但是在实际应用中,难免会遇到一些无法从报错信息直接判断 bug 所在的情况。

这个时候,如果可以在报错后,切换到 pdb 的调试模式就好了~

事实上,pdb 是支持这种用法的。

只要你在当前的会话中,导入 pdb,再执行 pdb.pm(),就可以切换到熟悉的 pdb 调试界面,并在抛错的地方打上断点,然后你就可以任意的查看运行时的变量信息。

如果你不是想等报错了再调试,而是一开始就想进入调试模式,可以使用 pdb.runcall() 函数

有的同学可能还会想到 pdb.run()pdb.runeval() 这两个函数,但这两种方法,是需要提前在函数调试断点的,这就比较麻烦了,一般情况下不推荐使用。

综上所述, pdb 调试方法主要有六种:

python -m pdb:运行 python 文件时直接进入调试模式

pdb.set_trace():事先设置断点,然后直接运行 python 文件

pdb.run():事先设置断点,然后直接运行 python 模块

pdb.runeval():事先设置断点,然后直接运行 python 模块(与 pdb.run 类似)

pdb.pm():在 Console 模式下出错后直接切换到调试模式,并定位到报错位置。

pdb.runcall():可以在不设置断点的情况下,直接调试代码片段。

其中,pdb.pm() 是本文的重点,他虽然冷门,但却很好用,推荐给大家。

以上就是我今天的分享,希望对你有用,如果你也有好用的调试小技巧,欢迎留言分享,互相学习。

文章最后给大家介绍三个我自己写的在线文档:

第一个文档:PyCharm 中文指南 1.0 文档

花了两个多月的时间,整理了 100 个 PyCharm 的使用技巧,为了让新手能够直接上手,我花了很多的时间录制了上百张 GIF 动图,有兴趣的前往在线文档阅读。

第二个文档:PyCharm 黑魔法指南 1.0 文档

系统收录各种 Python 冷门知识,Python Shell 的多样玩法,令人疯狂的 Python 炫技操作,Python 的超详细进阶知识解读,非常实用的 Python 开发技巧等。

第三个文档:Python 中文指南 1.0 文档

花了三个月时间写的一本 适合零基础入门 Python 的全中文教程,搭配大量的代码案例,让初学者对 代码的运作效果有一个直观感受,教程既有深度又有广度,每篇文章都会标内容的难度,是基础还是进阶的,可供读者进行选择,是一本难得的 Python 中文电子教程。

以上就是Python代码调试技巧教程详解的详细内容,更多关于Python调试技巧的资料请关注我们其它相关文章!

(0)

相关推荐

  • 常用的Python代码调试工具总结

    前言 我自己常用的简单Python代码调试工具是IDLE和Sublime3,IDLE很少使用了,基本上用Sublime3稍微多一些,Sublime3因为简单方便更直观.(VSCode也是一个不错的推荐,不过我没用过,心向往之.) 但实际开发中,基本上就使用PyCharm. 一.Python的交互模式 安装完成Python的解释器后,当我们在命令行中直接输入python命令,所进入到的界面就是Python的交互界面. 如下图所示: 在命令提示符后可以直接输入Python的指令,输入完的指令回车后,

  • 弄懂这56个Python使用技巧(轻松掌握Python高效开发)

    1. 枚举 - enumerate 可以有参数哦 之前我们这样操作: i = 0for item in iterable: print i, item i += 1 现在我们这样操作: for i, item in enumerate(iterable): print i, item enumerate函数还可以接收第二个参数.就像下面这样: >>> list(enumerate('abc')) [(0, 'a'), (1, 'b'), (2, 'c')] >>> li

  • 浅谈Python在pycharm中的调试(debug)

    作为一名程序员,调试(debug)程序是一项必会的事情,在利用pycharm这个pythonIDE时,不好好利用其调试功能真的是太可惜了. 借用这两天学习机器学习的工程. 在Deep_Learing工程中创建两个python文件,其中执行程序的文件名称为main.py,另一个KNN.py则是机器学习中一个小的模块,其中有算法代码. 在main.py中这样编写: 最关键的是写出 if __name__ == "__main__": 这句代码,这句代码代表主函数运行的入口,在其中写要进行测

  • 利用Pycharm断点调试Python程序的方法

    1.代码 准备没有语法错误的Python程序: #!/usr/bin/python import numpy as np class Network: def __init__(self,sizes): self.num_layers=len(sizes) self.sizes=sizes self.biases=[np.random.randn(y,1) for y in sizes[1:]] self.weights=[np.random.randn(x,y) \ for x,y in zi

  • python开启debug模式的方法

    python开启debug模式的代码如下所示: import requests session = requests.session() import logging import requests logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s', datefmt='%a, %d %b %Y %H:%M:%S'

  • Python代码调试技巧教程详解

    目录 关于代码调试的技巧,我之前写过很多的文章,加起来也有 将近 10 篇了,关注比较早的同学,也应该都有看过. 还没看过的同学,欢迎前往查阅:调试技巧 其中有一篇是关于 pdb 的调试技巧的: 里面介绍了两种 pdb 的调试入口,也是大部分所熟知的. 这里再带大家回顾一下 第一种:指定 -m pdb 来开启 $ python -m pdb pdb_demo.py 第二种:使用 pdb.set_trace() 在代码中设置断点 import pdb pdb.set_trace() 但其实,pdb

  • 基于Python代码编辑器的选用(详解)

    Python开发环境配置好了,但发现自带的代码编辑器貌似用着有点不大习惯啊,所以咱们就找一个"好用的"代码编辑器吧,网上搜了一下资料,Python常用的编辑器有如下一些: 1. Sublime Text 2. Vim 3. PyScripter 4. PyCharm 5. Eclipse with PyDev 6. Emacs 7. Komodo Edit 8. Wing 9. The Eric Python IDE 10. Interactive Editor for Python

  • Python制作微信机器人教程详解

    目录 一.环境配置 二.登录 三. 第一个简单的消息发送监控 四.指定某个微信好友发送消息 五.所有微信群监控 六.公众号监听 七.定时发送消息 八.微信智能聊天机器人 一.环境配置 大多数人无法登录网页版,所以饶过它模拟电脑登录,这个模块一定记得安装: pip install itchat-uos pip install itchat 二.登录 #码登录个人微信账号 import itchat itchat.auto_login(hotReload=True)#hotReload= True可

  • Python绘制散点图的教程详解

    少废话,直接上代码 import matplotlib.pyplot as plt import numpy as np # 1. 首先是导入包,创建数据 n = 10 x = np.random.rand(n) * 2# 随机产生10个0~2之间的x坐标 y = np.random.rand(n) * 2# 随机产生10个0~2之间的y坐标 # 2.创建一张figure fig = plt.figure(1) # 3. 设置颜色 color 值[可选参数,即可填可不填],方式有几种 # col

  • Python操作MongoDB的教程详解(插,查,改,排,删)

    目录 插入文档 插入集合 返回 _id 字段 插入多个文档 插入指定 _id 的多个文档 查询文档 查询一条数据 查询集合中所有数据 查询指定字段的数据 根据指定条件查询 高级查询 返回指定条数记录 修改文档 排序 删除数据 删除多个文档 删除集合中的所有文档 删除集合 MongoDB 是一个基于分布式文件存储的数据库.是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. MongoDB 是目前最流行的 NoSQL 数据库之一,使用的数据类型 BSON(

  • 六行python代码的爱心曲线详解

    前些日子在做绩效体系的时候,遇到了一件囧事,居然忘记怎样在Excel上拟合正态分布了,尽管在第二天重新拾起了Excel中那几个常见的函数和图像的做法,还是十分的惭愧.实际上,当时有效偏颇了,忽略了问题的本质,解决数据分析和可视化问题,其实也是Python的拿手好戏. 例如,画出指定区间的一个多项式函数: Python 代码如下: import numpy as np import matplotlib.pyplot as plt X = np.linspace(-4, 4, 1024) Y =

  • Python的pygame安装教程详解

    简介 关于Pygame的基本信息,pygame是什么,谁会被Pygame吸引,并且在哪里找到它. Pygame是被设计用来写游戏的python模块集合,Pygame是在优秀的SDL库之上开发的功能性包.使用python可以导入pygame来开发具有全部特性的游戏和多媒体软件,Pygame是极度轻便的并且可以运行在几乎所有的平台和操作系统上.Pygame包已经被下载过成千上万次,并且也被访问过成千上万次. Pygame是免费的,发行遵守GPL,你可以利用它开发开源的.免费的.免费软件.共享件.还有

  • Python 代码调试技巧示例代码

    Debug 对于任何开发人员都是一项非常重要的技能,它能够帮助我们准确的定位错误,发现程序中的 bug.python 提供了一系列 debug 的工具和包,可供我们选择.本文将主要阐述如何利用 python debug 相关工具进行 debug. 使用 pdb 进行调试 pdb 是 python 自带的一个包,为 python 程序提供了一种交互的源代码调试功能,主要特性包括设置断点.单步调试.进入函数调试.查看当前代码.查看栈片段.动态改变变量的值等.pdb 提供了一些常用的调试命令,详情见表

  • phpStudy vscode 搭建debug调试的教程详解

    下载地址 phpstudy:https://www.xp.cn/download.html vscode:https://code.visualstudio.com/ 设置 phpstudy版本:7.3.4nts [Xdebug] zend_extension=D:/phpstudy_pro/Extensions/php/php7.3.4nts/ext/php_xdebug.dll xdebug.collect_params=1 xdebug.collect_return=1 xdebug.au

  • 通过numba模块给Python代码提速的方法详解

    简介:numba是Anaconda公司开发的针对Python的开源JIT编译器,用于提供Python版CPU和GPU编程,速度比原生Python快数十倍.numba是第三方库,可以在运行时将Python代码编译为本地机器指令,而不会强制大幅度的改变普通的Python代码,使得在部分场景下执行Python的效率得到飞速的提升. 工作原理对比: Python文件执行过程 1..py文件通过解释器转化为虚拟机可以执行的字节码(.pyc):字节码在虚拟机上执行,得到结果. 2.字节码是一种只能运行在虚拟

随机推荐