Maison >Périphériques technologiques >Industrie informatique >Comment déboguer les erreurs Python

Comment déboguer les erreurs Python

William Shakespeare
William Shakespeareoriginal
2025-02-15 11:34:14772parcourir

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.

How to Debug Python Errors

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

Des outils tels que
<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.

How to Debug Python Errors

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.

How to Debug Python Errors

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn