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实现提取百度搜索结果的方法
May 19 Python
python去除字符串中的换行符
Oct 11 Python
使用python实现链表操作
Jan 26 Python
使用apidoc管理RESTful风格Flask项目接口文档方法
Feb 07 Python
Python走楼梯问题解决方法示例
Jul 25 Python
python 将大文件切分为多个小文件的实例
Jan 14 Python
python笔记之mean()函数实现求取均值的功能代码
Jul 05 Python
在pycharm中为项目导入anacodna环境的操作方法
Feb 12 Python
Windows下Anaconda和PyCharm的安装与使用详解
Apr 23 Python
scrapy爬虫:scrapy.FormRequest中formdata参数详解
Apr 30 Python
Django+Nginx+uWSGI 定时任务的实现方法
Jan 22 Python
Python可视化动图组件ipyvizzu绘制惊艳的可视化动图
Apr 21 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
模仿OSO的论坛(五)
2006/10/09 PHP
推荐几款用 Sublime Text 开发 Laravel 所用到的插件
2014/10/30 PHP
php调用KyotoTycoon简单实例
2015/04/02 PHP
PHP实现获取某个月份周次信息的方法
2015/08/11 PHP
PHP实现打包下载文件的方法示例
2017/10/07 PHP
解决php写入数据库乱码的问题
2019/09/17 PHP
javascript延时重复执行函数 lLoopRun.js
2007/06/29 Javascript
jQuery 学习第五课 Ajax 使用说明
2010/05/17 Javascript
js操作label给label赋值及取label的值示例
2013/11/07 Javascript
jQuery 删除或是清空某个HTML元素示例
2014/08/04 Javascript
浅谈jquery事件处理
2015/04/24 Javascript
Bootstrap树形控件使用方法详解
2016/01/27 Javascript
利用JS生成博文目录及CSS定制博客
2016/02/10 Javascript
Node.js操作mysql数据库增删改查
2016/03/30 Javascript
JavaScript的Vue.js库入门学习教程
2016/05/23 Javascript
有关JS中的0,null,undefined,[],{},'''''''',false之间的关系
2017/02/14 Javascript
js仿微信公众平台打标签功能
2017/04/08 Javascript
解决vue 按钮多次点击重复提交数据问题
2018/05/10 Javascript
python 将字符串转换成字典dict
2013/03/24 Python
Python 模板引擎的注入问题分析
2017/01/01 Python
让Django支持Sql Server作后端数据库的方法
2018/05/29 Python
Python的argparse库使用详解
2018/10/09 Python
详解Python 爬取13个旅游城市,告诉你五一大家最爱去哪玩?
2019/05/07 Python
香蕉共和国加拿大官网:Banana Republic加拿大
2018/08/06 全球购物
Aeropostale官网:美国著名校园品牌及青少年服饰品牌
2019/03/21 全球购物
美国亚洲时尚和美容产品的一站式网上商店:Stylevana
2019/09/05 全球购物
统计每一学生的平均成绩
2014/06/06 面试题
艺术设计专业个人求职信
2013/09/21 职场文书
会计学应届毕业生推荐信
2013/11/04 职场文书
大型会议接待方案
2014/03/01 职场文书
项目合作协议书
2014/09/23 职场文书
张家口市高新区党工委群众路线教育实践活动整改方案
2014/10/25 职场文书
2014年劳动部工作总结
2014/12/11 职场文书
违纪开除通知书
2015/04/25 职场文书
vue+elementui 实现新增和修改共用一个弹框的完整代码
2021/06/08 Vue.js
详细介绍python操作RabbitMq
2022/04/12 Python