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

作者:吃着东西不想停 时间:2021-01-08 16:14:34 

假设我们有一段程序,从 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实现的。

来源:https://www.cnblogs.com/zwhy8/archive/2020/06/22/13179379.html

标签:Python,程序,崩溃
0
投稿

猜你喜欢

  • HTML编写小经验

    2011-06-14 09:43:14
  • sqlserver只有MDF文件恢复数据库的方法

    2024-01-25 11:20:32
  • 基于Nodejs的Tcp封包和解包的理解

    2024-05-11 10:13:43
  • Javascript的一种模块模式

    2007-12-05 14:04:00
  • python编写adb截图工具的实现源码

    2021-03-24 08:50:15
  • go 对象池化组件 bytebufferpool使用详解

    2024-02-10 14:26:11
  • 在Pytorch中计算卷积方法的区别详解(conv2d的区别)

    2021-02-12 01:01:03
  • bootstrap table单元格新增行并编辑

    2024-04-10 16:09:09
  • Pytorch十九种损失函数的使用详解

    2021-07-19 22:23:07
  • Python基础之getpass模块详细介绍

    2021-03-06 13:47:13
  • PYQT5设置textEdit自动滚屏的方法

    2022-03-03 06:42:35
  • httpwatch 的页面元素加载时间表

    2008-02-13 08:28:00
  • MySQL实现批量插入以优化性能的教程

    2024-01-25 23:27:53
  • Python脚本提取fasta文件单序列信息实现

    2023-03-06 12:55:02
  • Python常见数字运算操作实例小结

    2022-01-02 21:04:16
  • django基于restframework的CBV封装详解

    2021-09-25 20:25:25
  • python实现抖音视频批量下载

    2023-12-06 10:30:20
  • 在MAC上搭建python数据分析开发环境

    2022-04-27 21:44:10
  • 微信小程序(十二)text组件详细介绍

    2024-04-19 09:43:53
  • DjangoRestFramework 使用 simpleJWT 登陆认证完整记录

    2021-03-29 18:34:12
  • asp之家 网络编程 m.aspxhome.com