Python 程序报错崩溃后如何倒回到崩溃的位置(推荐)


Posted in Python onJune 23, 2020

假设我们有一段程序,从 Redis 中读取数据,解析以后提取出里面的 name 字段:

import json
import redis
client = redis.Redis()
def read():
  while True:
    data = client.lpop('info')
    if data:
      yield json.loads(data)
    else:
      break
def parse():
  for data in self.read():
    print(data['name'])

if __name__ == '__main__':
  parse()

代码的逻辑本身很简单,从 Redis 中一条一条读取数据,读到的数据是 JSON 字符串,所以先使用json.loads解析成字典。然后读取字典中的name对应的值。一直读到Redis 列表为空。

我们运行一下看看:

Python 程序报错崩溃后如何倒回到崩溃的位置(推荐)

报错了,说明Redis 中的某一条数据有问题。你想看看这条有问题的数据,但是现在程序已经崩溃了,进程结束了,这条有问题的数据也就永久丢失了。你再也不可能知道它长什么样了。

玩过《火焰纹章-风花雪月》的朋友都知道,主角有一个技能叫做天刻之脉动,如果队友死了,他可以逆转时间,回到队友被杀之前,从而改变队友的命运。

那么,在Python里面我们有没有什么办法让程序起死回生,看到当初导致程序报错的那一行代码呢?如果你是使用python3 xxx.py运行的程序,那么确实,除非你能重新导入刚才的数据,否则无法知道。

但是,如果你是使用如下命令:python3 -i xxx.py启动的程序,那么世界就不一样了,你的程序获得了起死回生的能力。你可以重新回到事故现场。

我们恢复一下 Redis 的数据(当然,在生产环境里面你可能就没有办法恢复了。但现在写文章的示例数据,我还是可以回复的^_^)

然后使用python3 -i read_name.py重新运行这个程序:

Python 程序报错崩溃后如何倒回到崩溃的位置(推荐)

可以看到,现在虽然程序崩溃了,但是却出现了 Python 的交互环境。进程并没有完全退出。这样一来,我们就可以输入魔法指令,让程序倒退回到报错的那个地方。输入命令:

import pdbpdb.pm()

运行效果如下图所示:

Python 程序报错崩溃后如何倒回到崩溃的位置(推荐)

现在,我们已经回到了报错的那一行了。报错报的是data这个字典没有name这个 key,那么我们就来看看这个字典里面有什么,直接输入变量名data:

Python 程序报错崩溃后如何倒回到崩溃的位置(推荐)

原来,这一条有问题的数据,是把name写成了name1。

总结

pdb是Python自带的调试工具。我们使用的PyCharm的调试功能,也是基于pdb实现的。

到此这篇关于Python 程序报错崩溃后如何倒回到崩溃的位置的文章就介绍到这了,更多相关Python 程序报错崩溃内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python 函数传参之传值还是传引用的分析
Sep 07 Python
Python实现检测文件MD5值的方法示例
Apr 11 Python
解决Pycharm中import时无法识别自己写的程序方法
May 18 Python
Python使用gRPC传输协议教程
Oct 16 Python
python Selenium实现付费音乐批量下载的实现方法
Jan 24 Python
使用OpenCV-python3实现滑动条更新图像的Canny边缘检测功能
Dec 12 Python
Pandas —— resample()重采样和asfreq()频度转换方式
Feb 26 Python
python实现坦克大战
Apr 24 Python
pandas创建DataFrame的7种方法小结
Jun 14 Python
matplotlib subplot绘制多个子图的方法示例
Jul 28 Python
Selenium+BeautifulSoup+json获取Script标签内的json数据
Dec 07 Python
关于python中remove的一些坑小结
Jan 04 Python
浅谈pytorch中的BN层的注意事项
Jun 23 #Python
Python3与fastdfs分布式文件系统如何实现交互
Jun 23 #Python
踩坑:pytorch中eval模式下结果远差于train模式介绍
Jun 23 #Python
pytorch掉坑记录:model.eval的作用说明
Jun 23 #Python
Python使用Selenium实现淘宝抢单的流程分析
Jun 23 #Python
python2和python3哪个使用率高
Jun 23 #Python
python使用QQ邮箱实现自动发送邮件
Jun 22 #Python
You might like
PHP解析目录路径的3个函数总结
2014/11/18 PHP
CI框架封装的常用图像处理方法(缩略图,水印,旋转,上传等)
2016/11/22 PHP
PHP封装cURL工具类与应用示例
2019/07/01 PHP
jQuery学习笔记之总体架构
2014/06/03 Javascript
$("").click与onclick的区别示例介绍
2014/09/25 Javascript
jQuery中data()方法用法实例
2014/12/27 Javascript
js控制文本框只输入数字和小数点的方法
2015/03/10 Javascript
简单分析javascript面向对象与原型
2015/05/21 Javascript
JavaScript中的replace()方法使用详解
2015/06/06 Javascript
javascript瀑布流式图片懒加载实例
2020/06/28 Javascript
Angular4项目中添加i18n国际化插件ngx-translate的步骤详解
2017/07/02 Javascript
nodejs用gulp管理前端文件方法
2018/06/24 NodeJs
vue头部导航动态点击处理方法
2018/11/02 Javascript
如何在JavaScript中优雅的提取循环内数据详解
2019/03/04 Javascript
python中元类用法实例
2014/10/10 Python
python实现将文件夹下面的不是以py文件结尾的文件都过滤掉的方法
2018/10/21 Python
详解django自定义中间件处理
2018/11/21 Python
基于Python实现剪切板实时监控方法解析
2019/09/11 Python
使用浏览器访问python写的服务器程序
2019/10/10 Python
浅谈PyTorch的可重复性问题(如何使实验结果可复现)
2020/02/20 Python
使用Python第三方库pygame写个贪吃蛇小游戏
2020/03/06 Python
浅谈django 模型类使用save()方法的好处与注意事项
2020/03/28 Python
Python3实现英文字母转换哥特式字体实例代码
2020/09/01 Python
python字符串拼接+和join的区别详解
2020/12/03 Python
迪奥美国官网:Dior美国
2019/12/07 全球购物
测绘工程个人的自我评价
2013/11/10 职场文书
金属材料工程个人求职的自我评价
2013/12/04 职场文书
秋天的怀念教学反思
2014/04/28 职场文书
找工作求职信
2014/07/07 职场文书
员工团队活动方案
2014/08/28 职场文书
幼儿园大班个人总结
2015/02/28 职场文书
2015年评职称工作总结范文
2015/04/20 职场文书
入党转正介绍人意见
2015/06/03 职场文书
退休职工欢送会致辞
2015/08/01 职场文书
新年寄语2016
2015/08/17 职场文书
SQL Server数据库查询出现阻塞之性能调优
2022/04/10 SQL Server