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获取邮件地址的方法
Jul 10 Python
深入解析Python中的lambda表达式的用法
Aug 28 Python
基python实现多线程网页爬虫
Sep 06 Python
分享几道你可能遇到的python面试题
Jul 24 Python
Python中max函数用于二维列表的实例
Apr 03 Python
使用python对excle和json互相转换的示例
Oct 23 Python
Python3分析处理声音数据的例子
Aug 27 Python
python爬虫之遍历单个域名
Nov 20 Python
python3中使用__slots__限定实例属性操作分析
Feb 14 Python
django-csrf使用和禁用方式
Mar 13 Python
pycharm实现猜数游戏
Dec 07 Python
python双向链表实例详解
May 25 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
windows下PHP APACHE MYSQ完整配置
2007/01/02 PHP
分享PHP入门的学习方法
2007/01/02 PHP
php Sql Server连接失败问题及解决办法
2009/08/07 PHP
PHP 面向对象程序设计(oop)学习笔记 (四) - 异常处理类Exception
2014/06/12 PHP
PHP随机生成信用卡卡号的方法
2015/03/23 PHP
php数组比较实现查找连续数的方法
2015/07/29 PHP
浅析PHP中call user func()函数及如何使用call user func调用自定义函数
2015/11/05 PHP
joomla数据库操作示例代码
2016/01/06 PHP
PHP中的print_r 与 var_dump 输出数组
2016/06/13 PHP
php实现学生管理系统
2020/03/21 PHP
CI框架(CodeIgniter)公共模型类定义与用法示例
2017/08/10 PHP
JavaScript图片放大技术(放大镜)实现代码分享
2013/11/14 Javascript
Ajax同步与异步传输的示例代码
2013/11/21 Javascript
jQuery之ajax删除详解
2014/02/27 Javascript
js文件中直接alert()中文出来的是乱码的解决方法
2016/11/01 Javascript
JavaScript中String对象的方法介绍
2017/01/04 Javascript
jQuery实现的简单图片轮播效果完整示例
2018/02/08 jQuery
js实现盒子拖拽动画效果
2020/08/09 Javascript
[01:01:14]完美世界DOTA2联赛PWL S2 SZ vs Rebirth 第一场 11.21
2020/11/23 DOTA
Python入门篇之数字
2014/10/20 Python
如何在Python函数执行前后增加额外的行为
2016/10/20 Python
python 简单照相机调用系统摄像头实现方法 pygame
2018/08/03 Python
详解Python打包分发工具setuptools
2019/08/05 Python
Python使用graphviz画流程图过程解析
2020/03/31 Python
Python验证码截取识别代码实例
2020/05/16 Python
HTML5 video进入全屏和退出全屏的实现方法
2020/07/28 HTML / CSS
垃圾回收的优点和原理。并考虑2种回收机制
2016/10/16 面试题
行政主管岗位职责
2013/11/18 职场文书
餐饮总经理岗位职责
2014/03/07 职场文书
学习党的群众路线实践活动思想汇报
2014/09/12 职场文书
不服从上级领导安排的检讨书
2014/09/14 职场文书
公安机关正风肃纪剖析材料
2014/10/10 职场文书
劳动争议和解协议书范本
2014/11/20 职场文书
研究生学习计划书应该怎么写?
2019/09/10 职场文书
python文本处理的方案(结巴分词并去除符号)
2021/05/26 Python
sentinel支持的redis高可用集群配置详解
2022/04/01 Redis