Une fois que le programme Python a signalé une erreur et s'est écrasé, vous apprendre à revenir là où il s'est écrasé?

Supposons que nous ayons un programme qui lit les données de Redis et extrait le champ de nom à l'intérieur après l'analyse:

Beaucoup de gens apprennent python et ne savent pas par où commencer.
Beaucoup de gens apprennent python, après avoir maîtrisé la grammaire de base, ils ne savent pas où trouver des cas pour commencer.
De nombreuses personnes qui ont fait des études de cas ne savent pas comment acquérir des connaissances plus avancées.
Donc, pour ces trois types de personnes, je vais vous fournir une bonne plateforme d'apprentissage, gratuite pour recevoir des didacticiels vidéo, des livres électroniques et le code source des cours!
Groupe QQ: 1097524789

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 ():
pour les données dans self.read ():
print (data ['name'])

if name == ' main ': La logique du code
parse ()
lui-même est très simple. Lisez les données une à une depuis Redis. Les données lues sont une chaîne JSON, utilisez donc d'abord json.loads pour les analyser dans un dictionnaire. Ensuite, lisez la valeur correspondant au nom dans le dictionnaire. Continuez à lire jusqu'à ce que la liste Redis soit vide.

Lançons-le et voyons:
Insérez la description de l'image ici

Une erreur est signalée, indiquant qu'il y a un problème avec un élément de données dans Redis. Vous voulez examiner ces données problématiques, mais maintenant que le programme est tombé en panne et que le processus est terminé, ces données problématiques sont définitivement perdues. Vous ne saurez plus jamais à quoi cela ressemble.

Les amis qui ont joué à "Fire Emblem-Wind, Flower, Snow and Moon" savent que le protagoniste possède une compétence appelée Pulsation of the Moment. Si son coéquipier meurt, il peut inverser l'heure et revenir avant que le coéquipier ne soit tué, changeant ainsi le sort du coéquipier.

Donc, en Python, existe-t-il un moyen de redonner vie au programme et de voir la ligne de code qui a provoqué le signalement d'une erreur par le programme? Si vous utilisez python3 xxx.py pour exécuter le programme, alors en effet, à moins que vous ne puissiez réimporter les données tout à l'heure, vous ne le saurez pas.

Cependant, si vous utilisez la commande suivante: python3 -i xxx.py pour démarrer le programme, alors le monde est différent et votre programme a la capacité de le ramener à la vie. Vous pouvez retourner sur les lieux de l'accident.

Restaurons les données Redis (bien sûr, vous ne pourrez peut-être pas les restaurer dans l'environnement de production. Mais maintenant je peux répondre aux exemples de données de l'article _ )

Ensuite, utilisez python3 -i nom_lecture.py pour réexécuter le programme:

Insérez la description de l'image ici

Comme vous pouvez le voir, bien que le programme soit tombé en panne, l'environnement interactif de Python est apparu. Le processus ne s'est pas complètement terminé. De cette façon, nous pouvons entrer des instructions magiques pour que le programme retourne à l'endroit où l'erreur a été signalée. entrez la commande:

L'
effet de l' importation pdbpdb.pm () est illustré dans la figure ci-dessous:
Insérez la description de l'image ici

Maintenant, nous sommes revenus à la ligne où l'erreur a été signalée. Le rapport d'erreur est que le dictionnaire de données n'a pas la clé de nom, alors jetons un coup d'œil à ce qu'il y a dans ce dictionnaire et saisissons directement les données du nom de la variable:
Insérez la description de l'image ici

Il s'est avéré que cette donnée douteuse était écrite sous le nom de name1.

Résumé
pdb est un outil de débogage fourni avec Python. La fonction de débogage de PyCharm que nous utilisons est également basée sur pdb.

Je suppose que tu aimes

Origine blog.csdn.net/waitingwww/article/details/107020245
conseillé
Classement