假设我们有一段程序,从 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 列表为空。

我们运行一下看看:



报错了,说明Redis 中的某一条数据有问题。你想看看这条有问题的数据,然则现在程序已经溃逃了,历程竣事了,这条有问题的数据也就永远丢失了。你再也不可能知道它长什么样了。

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

那么,在Python内里我们有没有什么设施让程序死去活来,看到当初导致程序报错的那一行代码呢?若是你是使用python3 xxx.py运行的程序,那么确实,除非你能重新导入适才的数据,否则无法知道。

然则,若是你是使用如下下令:python3 -i xxx.py启动的程序,那么天下就不一样了,你的程序获得了死去活来的能力。你可以重新回到事故现场。

我们恢复一下 Redis 的数据(固然,在生产环境内里你可能就没有设施恢复了。但现在写文章的示例数据,我照样可以回复的^_^)

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



可以看到,现在虽然程序溃逃了,然则却泛起了 Python 的交互环境。历程并没有完全退出。这样一来,我们就可以输入邪术指令,让程序倒退回到报错的那个地方。输入下令:

import pdbpdb.pm()

,

以太坊高度数据

www.326681.com采用以太坊区块链高度哈希值作为统计数据,联博以太坊统计数据开源、公平、无任何作弊可能性。联博统计免费提供API接口,支持多语言接入。

,

运行效果如下图所示:



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



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

总结

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

到此这篇关于Python 程序报错溃逃后若何倒回到溃逃的位置的文章就先容到这了,更多相关Python 程序报错溃逃内容请搜索以前的文章或继续浏览下面的相关文章希望人人以后多多支持!