Es gibt viele Möglichkeiten, Fehler im Programm zu behandeln. Eine besteht darin, sich auf den Fehlercode zu einigen und dann anhand des zurückgegebenen Fehlercodes festzustellen, ob ein Fehler aufgetreten ist und welche Ursache er hat.
Es ist jedoch einfach, den richtigen Rückgabewert und Fehlercode zu vermischen, und Sie müssen viel Code schreiben, um sie zu unterscheiden, was sehr unpraktisch ist. Wenn außerdem etwas schiefgeht, müssen Sie es der nächsten Ebene nach der anderen melden, bis Sie wissen, dass es eine andere Ebene gibt, die damit umgehen kann.
Der ausgereiftere Ansatz ist der Fehlerbehandlungsmechanismus try...außer...finally.... Dieser Mechanismus beeinträchtigt die normalen Rückgabewerte nicht. Gleichzeitig ist es nicht erforderlich, jeweils eine Ebene manuell zu melden, sondern es ist nur eine Erfassungs- und Verarbeitungsebene erforderlich.
Code:
try: print open("Demo.py", 'r') n = 1 / 0 except ZeroDivisionError, e: print "zeroDivisionError", e except ValueError, e: print "ValueError", e else: print "No Error catched" finally: print "finally"
Bei der Verwendung der Fehlerbehandlung sind mehrere Punkte zu beachten:
Sie können mehrere Ausnahmen schreiben, um mehrere Ausnahmen abzufangen
Die Ausnahme der übergeordneten Klasse kann die Ausnahme der Unterklasse erfassen, und die abgefangene Ausnahme wird nicht an sie übergeben andere Ausnahmen.
Sie können die Situation ausnahmslos mit else behandeln
wird schließlich ausgeführt, unabhängig davon, ob eine vorliegt Fehler oder nicht.
Typen der integrierten Ausnahme
Die Vererbungsbeziehung der in Python (2.x) integrierten Ausnahme ist in der folgenden Abbildung dargestellt:
The class hierarchy for built-in exceptions is: BaseException +-- SystemExit +-- KeyboardInterrupt +-- GeneratorExit +-- Exception +-- StopIteration +-- StandardError | +-- BufferError | +-- ArithmeticError | | +-- FloatingPointError | | +-- OverflowError | | +-- ZeroDivisionError | +-- AssertionError | +-- AttributeError | +-- EnvironmentError | | +-- IOError | | +-- OSError | | +-- WindowsError (Windows) | | +-- VMSError (VMS) | +-- EOFError | +-- ImportError | +-- LookupError | | +-- IndexError | | +-- KeyError | +-- MemoryError | +-- NameError | | +-- UnboundLocalError | +-- ReferenceError | +-- RuntimeError | | +-- NotImplementedError | +-- SyntaxError | | +-- IndentationError | | +-- TabError | +-- SystemError | +-- TypeError | +-- ValueError | +-- UnicodeError | +-- UnicodeDecodeError | +-- UnicodeEncodeError | +-- UnicodeTranslateError +-- Warning +-- DeprecationWarning +-- PendingDeprecationWarning +-- RuntimeWarning +-- SyntaxWarning +-- UserWarning +-- FutureWarning +-- ImportWarning +-- UnicodeWarning +-- BytesWarning
Natürlich können wir auch eine Klasse anpassen, zum Beispiel:
class MyException(StandardException):
Natürlich wird empfohlen, Build-in Exception zu verwenden. Wir passen die Ausnahme nur dann an, wenn wir die benötigte Ausnahme nicht in der Ausnahme im Build-in finden können.
Um eine benutzerdefinierte Ausnahme auszulösen, verwenden Sie die folgende Syntax:
raise MyException("this is my Exception")
Im Testcode können wir die Ausnahme direkt bei der Behandlung von Exception drucken. Allerdings ist es möglicherweise nicht sinnvoll, Protokolle direkt im tatsächlichen Produktionscode zu drucken. Wir können logging.Exception(msg) verwenden, um durch einfache Konfiguration Fehler im Protokoll auszugeben. Wie Sie das in Python integrierte Protokollierungsmodul richtig verwenden, erfahren Sie in einem anderen Artikel.
Das Obige ist der Inhalt der Python-Studiennotizen – Fehlerbehandlung Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (m.sbmmt.com)!