eingehendes Verständnis von Python-Fehlern: Effiziente Fehlerbehebung mit Selbstbeobachtung und Debugger
In diesem Artikel wird untersucht, wie Programmfehler mithilfe von Pythons Introspection- und Debugging -Tools wie PDB effizient Debugug -Fehler debuggen. Der Artikel wird aus den Aspekten der typischen Fehlerinformationsanalyse, der PDB -Debugger -Nutzung, der Debugging von Produktionsumgebungen und häufig gestellten Fragen entwickelt, um den Lesern zu helfen, ihre Fähigkeiten zum Debuggen von Python zu verbessern.
Pythons kraftvolle Selbstbeobachtung ermöglicht es uns, Laufzeitfehler tiefer zu verstehen. Indem wir jeden Frame im Anrufstapel überprüfen, einschließlich der aufrufenden Parameter der Funktion, können wir Fehler leichter reproduzieren und verstehen. Tools wie Sentry nutzen diese Funktion voll und ganz, um umfassendere Fehlerkontextinformationen bereitzustellen.
Schauen wir uns ein gemeinsames Beispiel für Python -Fehler an:
<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>
Diese Fehlermeldung zeigt uns nur den Typ und die Position des Fehlers an, kann jedoch nicht direkt auf die Ursache des Fehlers hinweisen. Möglicherweise müssen wir vermuten, dass Ganzzahlen oder Nicht -Etypen verabschiedet werden, aber die tatsächliche Situation kann vielfältig sein.
Protokolldatensatz und PDB -Debugger
Eine einfache Debugging -Methode ist das Hinzufügen von Protokollierung:
import logging # ... logging.debug("function is of type %s", type(function))
Dies hilft, variable Typen während der Entwicklung zu verstehen. In Produktionsumgebungen ist dieser Ansatz jedoch aufgrund der Redundanz von Protokollen auf Debug-Ebene nicht ideal.
Zu diesem Zeitpunkt ist der Python -Debugger (PDB) nützlich. PDB ermöglicht es uns, den Code durch Haltepunkte durchzusetzen und Variablen und deren Typen zu überprüfen. Wir können Breakpoints einstellen, indem wir import pdb; pdb.set_trace()
in den Code einfügen:
def is_internal_function(self, function): try: return _internal_function_re.search(function) is not None except Exception: import pdb; pdb.set_trace() raise
zum Anzeigen des variablen Typs verwenden können, um die lokalen Variablen anzuzeigen und den Anrufstapel mit dem type(function)
und locals()
zu navigieren Befehle. down
up
In einer Produktionsumgebung können wir mit der CPython -Laufzeit auf den aktuellen Anrufstapel zugreifen, einschließlich lokaler Variablen für jeden Ausführungsrahmen.
Ausnahmeinformationen können erhalten werden, einschließlich Traceback -Objekten. Durch Durchqueren des Traceback -Objekts können wir auf das -attribut jedes Frame zugreifen, um die lokale Variable anzuzeigen: sys.exc_info()
f_locals
Tools wie
exc_type, exc_value, tb = sys.exc_info() inner_frame = tb.tb_next.tb_frame # 可能需要遍历tb_next找到合适的frame pprint(inner_frame.f_locals)
Der Artikel enthält schließlich FAQs über Python-Fehlerdebugging, Abdeckung gemeinsamer Fehlertypen, PDB-Nutzung, IDE-Debugging, Ausnahmebehandlung, Fern-Debugging, Multi-Threadd-Debugging, Debugging von Drittanbietern, Debugging von Performance Problem und Debugging-Verbesserung usw. .
Einige Inhalte dieses Artikels werden aus Wachpostenartikeln angepasst. Vielen Dank an unsere Partner, die SitePoint unterstützen.
Das obige ist der detaillierte Inhalt vonWie man Python -Fehler debuggiert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!