Supposons qu'il existe un morceau de code comme celui-ci :
try:
a = 1
b = 0
c = a / b
except Exception as e:
print(e)
Maintenant, je veux obtenir la valeur de chaque variable avant que l'exception ne se produise lorsque l'exception se produit, c'est-à-dire obtenir le résultat comme a=1, b=0.
inspect.currentframe
Ce python ne devrait pas être capable de l'implémenter activement, car s'il existe une telle méthode, une exception se produit lors des appels multicouches et les données correspondantes sont enregistrées couche par couche puis renvoyées, cela est susceptible de provoquer des problèmes de mémoire ; Et avant qu'une exception ne se produise, la machine virtuelle ne sait pas que vous avez un problème. C'est comme si votre exception de division par zéro ci-dessus exécutait a/b => 1/0, implémentée dans la fonction i_pmod. code de PyIntobject , on juge que le diviseur est 0, une exception est déclenchée directement, puis la pile renvoie couche par couche pour indiquer à l'utilisateur qu'une exception s'est produite. Il n'y a pas de code lié à la valeur du symbole. enregistré dans le try_block, donc la plupart des gens créent un code plus détaillé dans except , une sortie humanisée
.Utilisez ipython pour ouvrir pdb et vous pourrez signaler quelle ligne contient une erreur !
pdb
Le code d'adhésion est le suivant :
L'exécution est la suivante :