In diesem Abschnitt werden hauptsächlich die Prinzipien und Hauptformen der Ausnahmebehandlung in Python vorgestellt.
1. Was ist eine Ausnahme?
Ausnahmeobjekte werden in Python verwendet, um abnormale Situationen darzustellen. Eine Ausnahme wird ausgelöst, wenn ein Programm während der Ausführung auf einen Fehler stößt. Wenn das Ausnahmeobjekt nicht behandelt oder abgefangen wird, führt das Programm einen Backtrack aus und beendet die Ausführung.
2. Eine Ausnahme auslösen
Raise-Anweisung, gefolgt von der Exception-Ausnahmeklasse oder einer Unterklasse von Exception , Sie können in den Klammern von Exception auch Ausnahmeinformationen hinzufügen.
>>>raise Exception('message')
Hinweis: Die Exception-Klasse ist die Basis von allem Ausnahmeklassenklasse, wir können auch unsere eigene definierte Ausnahmeklasse basierend auf dieser Klasse erstellen, wie folgt:
class SomeCustomException(Exception): pass
3. Ausnahmen abfangen (try/exclusive-Anweisung)
Die try/exclusive-Anweisung wird verwendet, um Fehler im try-Anweisungsblock zu erkennen dass die außer-Anweisung Ausnahmeinformationen erfassen und verarbeiten kann.
In einem Try-Anweisungsblock können mehrere Ausnahmen ausgelöst werden:
try: x = input('Enter the first number: ') y = input('Enter the second number: ') print x/y except ZeroDivisionError: print "The second number can't be zero!" except TypeError: print "That wasn't a number, was it?"
Eine Ausnahmeanweisung kann mehrere Ausnahmen erfassen:
try: x = input('Enter the first number: ') y = input('Enter the second number: ') print x/y except (ZeroDivisionError, TypeError, NameError): #注意except语句后面的小括号 print 'Your numbers were bogus...'
Greifen Sie auf das erfasste Ausnahmeobjekt zu und drucken Sie die Ausnahmeinformationen aus:
try: x = input('Enter the first number: ') y = input('Enter the second number: ') print x/y except (ZeroDivisionError, TypeError), e: print e
Alle Ausnahmen abfangen, um das Übersehen unvorhersehbarer Ausnahmen zu verhindern:
try: x = input('Enter the first number: ') y = input('Enter the second number: ') print x/y except : print 'Someting wrong happened...'
4. else-Klausel. Zusätzlich zur Ausnahmeklausel können Sie auch die else-Klausel verwenden. Wenn im try-Block keine Ausnahme ausgelöst wird, wird die else-Klausel ausgeführt.
while 1: try: x = input('Enter the first number: ') y = input('Enter the second number: ') value = x/y print 'x/y is', value except: print 'Invalid input. Please try again.' else: break
Nachdem der obige Codeblock ausgeführt wurde, werden die x- und y-Werte vom Benutzer eingegeben Sind zulässig, wird die else-Unterroutine ausgeführt, wodurch das Programm die Ausführung beendet.
5. Schlussklausel. Unabhängig davon, ob in der try-Klausel eine Ausnahme auftritt, wird die final-Klausel auf jeden Fall ausgeführt und kann auch mit der else-Klausel verwendet werden. Die final-Klausel wird häufig verwendet, um den Datei- oder Netzwerk-Socket am Ende des Programms zu schließen.
try: 1/0 except: print 'Unknow variable' else: print 'That went well' finally: print 'Cleaning up'
6. Ausnahmen und Funktionen
Wenn eine Ausnahme innerhalb einer Funktion ausgelöst und nicht behandelt wird, wird sie an übergeben Der Funktionsaufruf. Wenn die Ausnahme nicht behandelt wird, wird sie an das Hauptprogramm übergeben und in Form eines Stack-Trace beendet.
def faulty(): raise Exception('Someting is wrong!') def ignore_exception(): faulty() def handle_exception(): try: faulty() except Exception, e: print 'Exception handled!',e handle_exception() ignore_exception()
Im obigen Codeblock löst die Funktion „faulty()“ eine Ausnahme aus und wird an übergeben, nachdem die Funktion „handle_Exception()“ „faulty()“ aufruft handle_Exception() und wird somit von der try/exclusive-Anweisung verarbeitet. Es gibt keine Ausnahmebehandlung für „faulty()“ in der Funktion „ignare_Exception()“, was einen Ausnahme-Stack-Trace verursacht.
Hinweis: Die bedingte Anweisung if/esle kann die gleiche Funktion wie die Ausnahmebehandlung erfüllen, die bedingte Anweisung ist jedoch möglicherweise weniger natürlich und lesbar.