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

Comment déboguer les erreurs Python

William Shakespeare
Libérer: 2025-02-15 11:34:14
original
772 Les gens l'ont consulté

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>
Copier après la connexion

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:

import logging
# ...
logging.debug("function is of type %s", type(function))
Copier après la connexion

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:

def is_internal_function(self, function):
    try:
        return _internal_function_re.search(function) is not None
    except Exception:
        import pdb; pdb.set_trace()
        raise
Copier après la connexion
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
exc_type, exc_value, tb = sys.exc_info()
inner_frame = tb.tb_next.tb_frame # 可能需要遍历tb_next找到合适的frame
pprint(inner_frame.f_locals)
Copier après la connexion
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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal