Praktische Diskussion darüber, wie Python Ausnahmebehandlung und Protokollierung durchführt

Dieser Artikel wurde von der Huawei Cloud Community „ Python Exception Handling and Logging to Build Robust and Reliable Applications “ von Lemony Hug geteilt.

Ausnahmebehandlung und Protokollierung sind wichtige Komponenten beim Schreiben zuverlässiger und leicht zu wartender Softwareanwendungen. Python bietet einen leistungsstarken Ausnahmebehandlungsmechanismus und flexible Protokollierungsfunktionen, die es Entwicklern erleichtern, Fehler im Code zu verwalten und den Ausführungsprozess der Anwendung zu verfolgen. In diesem Artikel untersuchen wir Best Practices für die Ausnahmebehandlung und Protokollierung in Python sowie einige Fallcodes zur Veranschaulichung dieser Konzepte.

Die Bedeutung der Ausnahmebehandlung

Unter Ausnahmebehandlung versteht man den Prozess der Behandlung von Fehlern oder ungewöhnlichen Situationen, die während der Programmausführung auftreten können. Eine gute Ausnahmebehandlung kann uns helfen:

  • Verbessern Sie die Programmstabilität: Durch das Abfangen und Behandeln von Ausnahmen können wir unerwartete Programmabstürze vermeiden und die Anwendungsstabilität verbessern.
  • Verbessern Sie die Benutzererfahrung: Wenn im Programm ein Fehler auftritt, können benutzerfreundliche Fehleraufforderungen und -behandlung die Benutzererfahrung verbessern und verhindern, dass Benutzer einen schlechten Eindruck vom Programm bekommen.
  • Einfacheres Debuggen und Warten: Eine gute Ausnahmebehandlung kann uns helfen, Probleme im Programm leichter zu lokalisieren und zu lösen und die Wartbarkeit des Codes zu verbessern.

Ausnahmebehandlung in Python

In Python wird die Ausnahmebehandlung durch die try-exclusive-Anweisung implementiert. Hier ist ein einfaches Beispiel für die Ausnahmebehandlung:

versuchen:
    # Versuch, Code auszuführen, der möglicherweise eine Ausnahme auslöst
    Ergebnis = 10 / 0
außer ZeroDivisionError:
    # Behandeln Sie bestimmte Arten von Ausnahmen
    print("Es ist ein Fehler beim Teilen durch Null aufgetreten!")

In diesem Beispiel versuchen wir, 10 dividiert durch 0 zu berechnen, was eine ZeroDivisionError-Ausnahme auslöst. Dann verwenden wir die Ausnahmeklausel, um diese Ausnahme abzufangen und die Fehlermeldung auszugeben. Zusätzlich zum Abfangen bestimmter Ausnahmetypen können wir exceptdie Klausel auch verwenden, um alle Ausnahmetypen für die allgemeine Fehlerbehandlung abzufangen.

Zusätzlich zum Abfangen von Ausnahmen können wir auch elseKlauseln verwenden, um bestimmten Code auszuführen, wenn im Try-Block keine Ausnahme auftritt, und finallyKlauseln, um bestimmten Bereinigungscode unabhängig davon auszuführen, ob eine Ausnahme auftritt.

Die Bedeutung der Protokollierung

Bei der Protokollierung handelt es sich um eine Technik, die wichtige Informationen während der Ausführung einer Anwendung aufzeichnet. Eine gute Protokollierung hilft uns:

  • Verfolgen Sie den Ausführungsprozess der Anwendung: Durch die Aufzeichnung wichtiger Ereignisse und Statusinformationen können wir den Ausführungsprozess der Anwendung verfolgen und uns helfen, das Verhalten des Programms zu verstehen.
  • Diagnose und Fehlerbehebung: Wenn im Programm ein Problem auftritt, kann die Protokollierung nützliche Debugging-Informationen liefern, die uns helfen, das Problem schnell zu lokalisieren und zu lösen.
  • Überwachung und Analyse: Durch die Analyse von Protokolldaten können wir die Leistung und Nutzung der Anwendung verstehen und so das Programm optimieren und verbessern.

Anmelden in Python

Module in der Python-Standardbibliothek loggingbieten leistungsstarke und flexible Protokollierungsfunktionen. Mit diesem Modul können wir einen Logger erstellen, die Protokollebene festlegen, das Protokollformat definieren usw. Hier ist ein einfaches Protokollierungsbeispiel:

Protokollierung importieren

# Logger erstellen
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)

#Dateihandler erstellen
file_handler = logging.FileHandler('app.log')
file_handler.setLevel(logging.INFO)

#Protokollformat erstellen
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
file_handler.setFormatter(formatter)

# Handler zum Logger hinzufügen
logger.addHandler(file_handler)

# Protokollinformationen aufzeichnen
logger.info('Dies ist ein Informationsprotokoll')
logger.warning('Dies ist ein Warnprotokoll')
logger.error('Dies ist ein Fehlerprotokoll')

In diesem Beispiel erstellen wir zunächst einen Logger loggerund setzen die Protokollebene auf INFO. Anschließend haben wir einen Dateihandler erstellt file_handler, dessen Ebene ebenfalls auf INFO gesetzt und das Protokollformat definiert. Schließlich fügen wir dem Logger den Dateiprozessor hinzu und verwenden Methoden wie logger.info(), logger.warning()und , logger.error()um verschiedene Ebenen von Protokollinformationen aufzuzeichnen.

Best-Practice-Beispiele

Hier ist ein Beispiel für Best Practices, die Ausnahmebehandlung und Protokollierung kombinieren:

Protokollierung importieren

# Logger erstellen
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)

#Dateihandler erstellen
file_handler = logging.FileHandler('app.log')
file_handler.setLevel(logging.INFO)

#Protokollformat erstellen
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
file_handler.setFormatter(formatter)

# Handler zum Logger hinzufügen
logger.addHandler(file_handler)

def teile(x, y):
    versuchen:
        Ergebnis = x / y
    außer ZeroDivisionError als e:
        logger.error(f"Teile durch Null Fehler: {e}")
    außer Ausnahme als e:
        logger.error(f"Ausnahme aufgetreten: {e}")
    anders:
        logger.info(f"Ergebnis: {result}")
    Endlich:
        logger.info("Vorgang beendet")

# Testfunktion
dividieren(10, 2)
dividieren(10, 0)

In diesem Beispiel definieren wir eine divide()Funktion namens, die den Quotienten zweier Zahlen berechnet. Innerhalb der Funktion verwenden wir eine Try-Exception-Anweisung, um mögliche Division-durch-Null-Fehler abzufangen, und verwenden einen Logger, um Ausnahmeinformationen aufzuzeichnen. Am Ende der Funktionsausführung verwenden wir finallyeine Klausel, um Informationen über das Ende der Operation aufzuzeichnen.

Um besser zu verstehen, wie man Python zur Ausnahmebehandlung und Protokollierung verwendet, und um diese Best Practices in realen Projekten anzuwenden. In der tatsächlichen Entwicklung können zusätzlich zur grundlegenden Ausnahmebehandlung und Protokollierung auch komplexere Konfigurationen und Optimierungen basierend auf den Merkmalen und Anforderungen des Projekts durchgeführt werden, wie zum Beispiel:

  • Benutzerdefinierte Ausnahmeklassen verwenden : Zusätzlich zu den in Python integrierten Ausnahmetypen können wir auch unsere eigenen Ausnahmeklassen definieren, um Ausnahmeinformationen besser zu organisieren und zu verwalten.
  • Flexible Verwendung von Protokollebenen : Je nach Teilen und Anforderungen der Anwendung kann die Ebene des Loggers flexibel angepasst werden, um Debugging und Überwachung in verschiedenen Umgebungen zu ermöglichen.
  • Hierarchische Aufzeichnung von Protokollen : Neben der Verwendung unterschiedlicher Protokollierungsmethoden können Protokolle auch in verschiedenen Dateien oder Datenquellen aufgezeichnet werden, basierend auf der Wichtigkeit und Art der Protokollnachrichten für die anschließende Analyse und Verarbeitung.
  • Integrieren Sie Protokolldienste von Drittanbietern : Bei großen Projekten oder verteilten Systemen können Sie die Integration von Protokolldiensten von Drittanbietern (wie ELK Stack, Splunk usw.) in Betracht ziehen, um erweiterte Protokollverwaltungs- und Überwachungsfunktionen zu erreichen.

Zusammenfassend lässt sich sagen, dass Ausnahmebehandlung und Protokollierung unverzichtbare und wichtige Komponenten bei der Entwicklung von Python-Anwendungen sind. Durch die sinnvolle Nutzung des von Python bereitgestellten Ausnahmebehandlungsmechanismus und der Protokollierungsfunktionen sowie die flexible Konfiguration und Optimierung entsprechend der tatsächlichen Projektsituation können wir robustere und zuverlässigere Softwareanwendungen schreiben, die Benutzererfahrung verbessern und die Fehlerkosten senken Auftreten und Abwicklung, was eine starke Unterstützung für die erfolgreiche Durchführung sowie den Betrieb und die Wartung des Projekts darstellt.

In realen Projekten finden Sie hier einige zusätzliche Tipps und Best Practices, die die Effizienz und Wartbarkeit der Ausnahmebehandlung und Protokollierung weiter verbessern können:

Verwenden von Kontextmanagern

Der Kontextmanager ist ein elegantes Ressourcenverwaltungstool in Python, das für die korrekte Zuweisung und Freigabe von Ressourcen sorgt. Durch die Kombination von Kontextmanagern und Ausnahmebehandlung können wir Ressourcen besser verwalten und Ressourcenlecks und unerwartete Fehler vermeiden. Beispielsweise können Sie withAnweisungen verwenden, um Dateivorgänge zu verwalten:

versuchen:
    mit open('file.txt', 'r') as f:
        content = f.read()
außer FileNotFoundError:
    logger.error('Datei existiert nicht')
außer Ausnahme als e:
    logger.error(f'Ausnahme aufgetreten: {e}')

Verwendung von Dekorateuren

Dekoratoren sind eine leistungsstarke Funktion in Python, mit der vor und nach der Funktionsausführung zusätzliche Logik hinzugefügt werden kann. Durch die Anpassung von Dekoratoren können wir eine einheitliche Ausnahmebehandlungs- und Protokollierungslogik implementieren und vermeiden, in jeder Funktion wiederholt ähnlichen Code zu schreiben. Sie können beispielsweise einen Dekorator schreiben, um die Ausführungszeit der Funktion und Ausnahmeinformationen aufzuzeichnen:

Importzeit

def log_Exceptions(func):
    def wrapper(*args, **kwargs):
        versuchen:
            start_time = time.time()
            result = func(*args, **kwargs)
            end_time = time.time()
            logger.info(f"{func.__name__} Ausführungszeit: {end_time - start_time} Sekunden")
            Ergebnis zurückgeben
        außer Ausnahme als e:
            logger.error(f"Ausnahme in Funktion {func.__name__}: {e}" aufgetreten)
    Rückumschlag

@log_Exceptions
def some_function():
    # Funktionslogik
    passieren

Kombiniert mit Fehlercodes

In komplexen Anwendungen können Fehlercodes verwendet werden, um verschiedene Fehlertypen zu identifizieren und Ausnahmeinformationen besser zu organisieren und zu verwalten. Durch die Definition einer Reihe von Fehlercodes und entsprechenden Fehlermeldungen können Sie Ihren Code lesbarer und wartbarer machen. Zum Beispiel:

ERROR_CODE_DIVIDE_BY_ZERO = 1001
ERROR_CODE_FILE_NOT_FOUND = 1002

def teile(x, y):
    versuchen:
        Ergebnis = x / y
    außer ZeroDivisionError:
        logger.error(f"Teile durch Null Fehler: {e}", extra={'error_code': ERROR_CODE_DIVIDE_BY_ZERO})
    außer FileNotFoundError:
        logger.error(f"Datei nicht gefunden: {e}", extra={'error_code': ERROR_CODE_FILE_NOT_FOUND})

Verwenden Sie die Protokollierungsbibliothek eines Drittanbieters

Zusätzlich zum Protokollierungsmodul in der Python-Standardbibliothek stehen viele hervorragende Protokollierungsbibliotheken von Drittanbietern zur Auswahl, z. B. Loguru, Structlog usw. Diese Bibliotheken bieten umfangreichere Funktionen und benutzerfreundlichere APIs, und Sie können die geeignete Bibliothek für die Protokollierung entsprechend den tatsächlichen Anforderungen auswählen.

Definieren Sie klare Richtlinien auf Protokollebene

Beim Entwerfen eines Protokollierungssystems sollte eine klare Protokollebenenrichtlinie definiert werden, um die Genauigkeit und Lesbarkeit der Protokollinformationen sicherzustellen. Im Allgemeinen können je nach Wichtigkeit und Dringlichkeit der Protokollmeldung unterschiedliche Protokollebenen definiert werden, z. B. DEBUG, INFO, WARNING, ERROR und CRITICAL. In der täglichen Entwicklung sollten je nach Situation geeignete Protokollebenen verwendet werden, um sicherzustellen, dass die Protokollinformationen weder zu ausführlich sind noch wichtige Informationen verloren gehen.

Berücksichtigen Sie Internationalisierungs- und Lokalisierungsanforderungen

Bei Anwendungen, die sich an globale Benutzer richten, sollten Internationalisierungs- und Lokalisierungsanforderungen berücksichtigt werden, und in Protokolldatensätzen sollten standardisierte internationalisierte Text- und Formatierungsmethoden verwendet werden, um die Lesbarkeit und Konsistenz der Protokollinformationen in verschiedenen Sprachumgebungen sicherzustellen. Gleichzeitig sollten auch Zeitformate und Gewohnheiten verschiedener Zeitzonen und Regionen berücksichtigt werden, um Protokollinformationen besser zu verstehen und zu analysieren.

Implementieren Sie Protokollrotation und -archivierung

Bei lang laufenden Anwendungen können Protokolldateien kontinuierlich wachsen und viel Speicherplatz beanspruchen. Um diese Situation zu vermeiden, können Sie Protokollrotations- und Archivierungsfunktionen implementieren und alte Protokolldateien regelmäßig bereinigen und komprimieren, um Speicherplatz zu sparen und die Zugänglichkeit von Protokollinformationen sicherzustellen. Sie können Bibliotheken von Drittanbietern in Python (z. B. LogRotate) verwenden, um Protokollrotations- und Archivierungsfunktionen zu implementieren, oder sie entsprechend den Projektanforderungen selbst implementieren.

Integrieren Sie Überwachungs- und Alarmsysteme

In einer Produktionsumgebung ist es entscheidend, Ausnahmen rechtzeitig zu erkennen und zu behandeln. Daher können Überwachungs- und Alarmierungssysteme kombiniert werden, um eine Echtzeitüberwachung und Alarmierung von Protokollinformationen zu erreichen. Durch das Hinzufügen von Schlüsselwörtern und Identifikatoren zu Protokolldatensätzen und die Einrichtung eines Überwachungssystems zu deren Überwachung können ungewöhnliche Situationen rechtzeitig erkannt und entsprechende Maßnahmen ergriffen werden, um den stabilen Betrieb der Anwendung sicherzustellen.

Führen Sie kontinuierliche Verbesserungen und Optimierungen durch

Die Ausnahmebehandlung und -protokollierung ist ein kontinuierlicher Verbesserungsprozess, und bestehende Strategien zur Ausnahmebehandlung und -protokollierung sollten regelmäßig überprüft und optimiert werden, um sie an die Projektentwicklung und -änderungen anzupassen. Protokolldatensätze können regelmäßig analysiert und gezählt werden, um potenzielle Probleme und Optimierungsspielraum zu entdecken, und die Prozesse und Mechanismen für die Ausnahmebehandlung und Protokollierung können zeitnah angepasst und verbessert werden, um die Stabilität und Wartbarkeit der Anwendung zu verbessern.

Durch die oben genannten Tipps und Best Practices können wir Python besser für die Ausnahmebehandlung und Protokollierung einsetzen und robuste und zuverlässige Softwareanwendungen in tatsächlichen Projekten erstellen. Ausnahmebehandlung und Protokollierung sind wichtige Glieder im Softwareentwicklungsprozess. Sie können uns nicht nur dabei helfen, Probleme zu finden und zu lösen, sondern auch die Wartbarkeit und Lesbarkeit des Codes verbessern und so die erfolgreiche Bereitstellung und den Betrieb des Projekts erheblich unterstützen.

Zusammenfassen

Ausnahmebehandlung und Protokollierung sind wesentliche und kritische Komponenten bei der Entwicklung von Python-Anwendungen. Durch die Einleitung und ausführliche Diskussion dieses Artikels befassen wir uns mit den Best Practices der Verwendung von Python für die Ausnahmebehandlung und Protokollierung und stellen eine Fülle von Fallcodes und Techniken bereit, die Entwicklern helfen, diese wichtigen Konzepte besser zu verstehen und anzuwenden.

Im Hinblick auf die Ausnahmebehandlung haben wir gelernt, wie man die try-exclusive-Anweisung verwendet, um eventuell auftretende Ausnahmen abzufangen und zu behandeln, und besprochen, wie man die else-Klausel und die final-Klausel verwendet, um entsprechende Bereinigungsarbeiten durchzuführen. Wir haben auch untersucht, wie wir fortschrittliche Techniken wie Kontextmanager und Dekoratoren kombinieren können, um die Effizienz und Wartbarkeit der Ausnahmebehandlung weiter zu verbessern.

Was die Protokollierung angeht, haben wir uns das Protokollierungsmodul in der Python-Standardbibliothek eingehend angesehen und gelernt, wie man einen Logger erstellt, die Protokollebene festlegt und das Protokollformat sowie andere grundlegende Vorgänge definiert. Darüber hinaus haben wir auch besprochen, wie je nach Projektanforderungen unterschiedliche Protokollebenen und Protokollierungsmethoden verwendet werden können und wie Technologien wie Fehlercodes und Protokollbibliotheken von Drittanbietern kombiniert werden können, um flexiblere und effizientere Protokollierungsfunktionen zu erzielen.

Zusätzlich zur grundlegenden Ausnahmebehandlung und Protokollierung befassen wir uns auch mit einer Reihe fortgeschrittener Tipps und Best Practices, z. B. der Definition klarer Richtlinien auf Protokollebene, der Berücksichtigung von Internationalisierungs- und Lokalisierungsanforderungen, der Implementierung von Protokollrotation und -archivierung sowie der Kombination von Überwachungs- und Warnsystemen usw. Diese Fähigkeiten und Praktiken können Entwicklern helfen, komplexe Projektanforderungen und tatsächliche Situationen besser zu bewältigen und die Qualität und Wartbarkeit des Codes zu verbessern.

Kurz gesagt: Durch die ordnungsgemäße Anwendung der Best Practices der Ausnahmebehandlung und -protokollierung können wir robuste und zuverlässige Python-Anwendungen schreiben, die Benutzererfahrung verbessern, das Auftreten von Fehlern und die Verarbeitungskosten reduzieren und eine starke Unterstützung für die erfolgreiche Bereitstellung und den Betrieb von Projekten bieten. Bei zukünftigen Entwicklungsarbeiten sollten wir weiterhin auf die Ausnahmebehandlung und Protokollierung achten und diese kontinuierlich optimieren, um die Stabilität und Wartbarkeit der Anwendung sicherzustellen und Benutzern bessere Dienste und Erfahrungen zu bieten.

Klicken Sie hier, um zu folgen und so schnell wie möglich mehr über die neuen Technologien von Huawei Cloud zu erfahren~

 

Ich habe beschlossen, Open-Source-Hongmeng aufzugeben . Wang Chenglu, der Vater von Open-Source-Hongmeng: Open-Source-Hongmeng ist die einzige Architekturinnovations- Industriesoftwareveranstaltung im Bereich Basissoftware in China – OGG 1.0 wird veröffentlicht, Huawei steuert den gesamten Quellcode bei Google Reader wird vom „Code-Scheißberg“ getötet Fedora Linux 40 wird offiziell veröffentlicht Ehemaliger Microsoft-Entwickler: Windows 11-Leistung ist „lächerlich schlecht“ Ma Huateng und Zhou Hongyi geben sich die Hand, um „Groll zu beseitigen“ Namhafte Spielefirmen haben neue Vorschriften erlassen : Hochzeitsgeschenke für Mitarbeiter dürfen 100.000 Yuan nicht überschreiten Ubuntu 24.04 LTS offiziell veröffentlicht Pinduoduo wurde wegen unlauteren Wettbewerbs zu einer Entschädigung von 5 Millionen Yuan verurteilt
{{o.name}}
{{m.name}}

Ich denke du magst

Origin my.oschina.net/u/4526289/blog/11054810
Empfohlen
Rangfolge