Maison >Périphériques technologiques >Industrie informatique >Comment déboguer les erreurs Python
compréhension approfondie des erreurs de python: dépannage efficace avec l'introspection et le débogueur
Cet article explore comment déboguer efficacement les erreurs de programme à l'aide d'outils d'introspection et de débogage de Python tels que PDB. L'article sera développé à partir des aspects de l'analyse typique des informations d'erreur, de l'utilisation du débogueur PDB, du débogage de l'environnement de production et des questions fréquemment posées pour aider les lecteurs à améliorer leurs compétences de débogage python.
La puissante introspection de Python nous permet de comprendre plus profondément les erreurs d'exécution. En vérifiant chaque trame de la pile d'appels, y compris les paramètres d'appel de la fonction, nous pouvons reproduire et comprendre les erreurs plus facilement. Des outils tels que Sentry utilisent pleinement cette fonctionnalité pour fournir des informations de contexte d'erreur plus riches.
Regardons un exemple d'erreur python commun:
<code>TypeError: expected string or buffer File "sentry/stacktraces.py", line 309, in process_single_stacktrace processable_frame, processing_task) File "sentry/lang/native/plugin.py", line 196, in process_frame in_app = (in_app and not self.sym.is_internal_function(raw_frame.get('function'))) File "sentry/lang/native/symbolizer.py", line 278, in is_internal_function return _internal_function_re.search(function) is not None</code>
Ce message d'erreur nous indique uniquement le type et l'emplacement de l'erreur, mais ne peut pas dire directement la cause de l'erreur. Nous devrons peut-être deviner que les entiers ou les non-tentypes sont passés, mais la situation réelle peut être diversifiée.
Enregistrement du journal et débogueur PDB
Une méthode de débogage simple consiste à ajouter la journalisation:
<code class="language-python">import logging # ... logging.debug("function is of type %s", type(function))</code>
Cela aide à comprendre les types de variables pendant le développement. Cependant, dans les environnements de production, cette approche n'est pas idéale en raison de la redondance des journaux au niveau du débogage.
À ce stade, le débogueur Python (PDB) est utile. PDB nous permet de parcourir le code à travers des points d'arrêt et de vérifier les variables et leurs types. Nous pouvons définir des points d'arrêt en insérant import pdb; pdb.set_trace()
dans le code:
<code class="language-python">def is_internal_function(self, function): try: return _internal_function_re.search(function) is not None except Exception: import pdb; pdb.set_trace() raise</code>Une fois que le point d'arrêt a frappé, nous entrons dans l'environnement interactif PDB où nous pouvons utiliser le
pour afficher le type de variable, utiliser le type(function)
pour afficher les variables locales et naviguer dans la pile d'appels avec les locals()
et down
Commandes. up
Environnement de production Débogage
Dans un environnement de production, le runtime CPYthon nous permet d'accéder à la pile d'appels actuelle, y compris des variables locales pour chaque trame d'exécution. Les informations d'exception peuvent être obtenues, y compris les objets Traceback. En traversant l'objet Traceback, nous pouvons accéder à l'attribut sys.exc_info()
de chaque trame pour afficher la variable locale: f_locals
<code class="language-python">exc_type, exc_value, tb = sys.exc_info() inner_frame = tb.tb_next.tb_frame # 可能需要遍历tb_next找到合适的frame pprint(inner_frame.f_locals)</code>Sentry effectueront automatiquement des opérations d'introspection similaires, fournissant des informations de contexte d'erreur riches sans ajout manuellement de code.
FAQ
L'article fournit enfin des FAQ sur le débogage des erreurs de python, la couverture des types d'erreur courants, l'utilisation de PDB, le débogage IDE, la gestion des exceptions, le débogage à distance, le débogage multi-thread, l'amélioration des compétences de bibliothèque tierce, le débogage des problèmes de performance et le débogage des compétences d'amélioration, etc. .
Un certain contenu de cet article est adapté des articles Sentry. Merci à nos partenaires qui soutiennent SitePoint.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!