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:
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() raiseUne 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
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.
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!

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

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

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

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


Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

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 !

Article chaud

Outils chauds

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

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
Un éditeur IDE gratuit et puissant lancé par Microsoft

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
Puissant environnement de développement intégré PHP
