recherche

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:

import logging
# ...
logging.debug("function is of type %s", type(function))

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
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)
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
Top 21 newsletters du développeur auquel s'abonner en 2025Top 21 newsletters du développeur auquel s'abonner en 2025Apr 24, 2025 am 08:28 AM

Restez informé des dernières tendances technologiques avec ces meilleurs bulletins de développeur! Cette liste organisée offre quelque chose pour tout le monde, des amateurs d'IA aux développeurs assaisonnés du backend et du frontend. Choisissez vos favoris et gagnez du temps à la recherche de rel

Pipeline de traitement d'image sans serveur avec AWS ECS et LambdaPipeline de traitement d'image sans serveur avec AWS ECS et LambdaApr 18, 2025 am 08:28 AM

Ce tutoriel vous guide dans la création d'un pipeline de traitement d'image sans serveur à l'aide de services AWS. Nous allons créer un frontend Next.js déployé sur un cluster ECS Fargate, en interagissant avec une passerelle API, des fonctions lambda, des seaux S3 et DynamoDB. Ème

Pilote CNCF ARM64: impact et perspectivesPilote CNCF ARM64: impact et perspectivesApr 15, 2025 am 08:27 AM

Ce programme pilote, une collaboration entre le CNCF (Cloud Native Computing Foundation), Ampere Computing, Equinix Metal et ACTUTIE, rationalise ARM64 CI / CD pour les projets GitHub CNCF. L'initiative répond aux problèmes de sécurité et aux performances LIM

Construire un scanner de vulnérabilité de réseau avec GoConstruire un scanner de vulnérabilité de réseau avec GoApr 01, 2025 am 08:27 AM

Ce scanner de vulnérabilité de réseau basé sur GO identifie efficacement les faiblesses de sécurité potentielles. Il exploite les fonctionnalités de concurrence de GO pour la vitesse et comprend la détection de services et la correspondance de vulnérabilité. Explorons ses capacités et ses éthiques

See all articles

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Version crackée d'EditPlus en chinois

Version crackée d'EditPlus en chinois

Petite taille, coloration syntaxique, ne prend pas en charge la fonction d'invite de code

VSCode Windows 64 bits Télécharger

VSCode Windows 64 bits Télécharger

Un éditeur IDE gratuit et puissant lancé par Microsoft

Listes Sec

Listes Sec

SecLists est le compagnon ultime du testeur de sécurité. Il s'agit d'une collection de différents types de listes fréquemment utilisées lors des évaluations de sécurité, le tout en un seul endroit. SecLists contribue à rendre les tests de sécurité plus efficaces et productifs en fournissant facilement toutes les listes dont un testeur de sécurité pourrait avoir besoin. Les types de listes incluent les noms d'utilisateur, les mots de passe, les URL, les charges utiles floues, les modèles de données sensibles, les shells Web, etc. Le testeur peut simplement extraire ce référentiel sur une nouvelle machine de test et il aura accès à tous les types de listes dont il a besoin.

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Puissant environnement de développement intégré PHP