Die Anleitung zu Python Exception
1. Was ist Exception?
Zuerst schauen wir ein Beispiel wie folgend:
Im Beispiel gibt es eine fehlerhafte Code wegen die Division durch 0. Die Division durch 0 verursacht eine Ausnahme: ZeroDivisionError
Im Beispiel gibt es eine fehlerhafte Code wegen die Division durch 0. Die Division durch 0 verursacht eine Ausnahme: ZeroDivisionError
helloExceptionExample.py
print ("Three")
# Die Division hat kein Problem.
value = 10 / 2
print ("Two")
# Die Division hat kein Problem.
value = 10 / 1
print ("One")
d = 0
# Die Division hat ein Problem, das die Teilung durch 0 ist. Ein Fehler tritt hier auf.
value = 10 / d
# Die folgende Code wird nicht implementiert.
print ("Let's go!")
Das Ergebnis der Durchführung des Beispiel:
Sie können die Fehleranmeldung auf Console. Die Fehleranmeldung ist sehr klar, sie zeigt, auf welcher Zeile die Fehler auftritt
Sie können die Fehleranmeldung auf Console. Die Fehleranmeldung ist sehr klar, sie zeigt, auf welcher Zeile die Fehler auftritt
Schauen Sie das Thread des Programm in das folgende Beispiel.
- Das Programm läuft ganz normal vom Schritt (1),(2) zum Schritt (6)
- Der Schritt (7) tritt einen Fehler bei der Division durch 0 auf. Das Programm endet.
- Die Code im Schritt (8) wird nicht durchgeführt.
Wir werden die Kode des oben Beispiel verändern
helloCatchException.py
print ("Three")
value = 10 / 2
print ("Two")
value = 10 / 1
print ("One")
d = 0
try :
# Die Division hat ein Problem, die Teilung durch 0.
# Ein Fehler tritt hier auf (ZeroDivisionError).
value = 10 / d
print ("value = ", value)
except ZeroDivisionError as e :
print ("Error: ", str(e) )
print ("Ignore to continue ...")
print ("Let's go!")
Und das Ergebnis der Beispiel
Three
Two
One
Error division by zero
Ignore to coninue ...
Let's go!
Wir erklären das Thread des Programm durch das folgende Beispiel.
- Die Schritte (1)-(6) läuft ganz normal.
- Die Ausnahme passiert im Schritt (7), das Problem ist die Division durch 0.
- Sofort implementiert es den Befehl im Block except, der Schritt (8) wird skipped.
- Der Schritt (9) und (10) werden durchgeführt.
- Der Schritt (11) wird durchgeführt
2. Das hierarchische Diagramm
This is the model of hierarchical map of Exception in Python.
- Die Klasse in der höchsten Level ist BaseException
- Die direkten Sub-Klasse sind Exception und KeyboardInterrupt, ..
DIe vorhandenen Exception vomPython werden normalerweise aus BaseException gestammt (derived) (aus BaseException verlängert). Inzwischen sollen die Ausnahme der Programmer aus der Klasse Exception oder aus seiner Sub-Klasse erben
3. Die Ausnahme durch try-except fangen
Wir schreiben eine Klasse Exception, die aus der Klasse Exception erbt.
Die Funktion checkAge ist die Alterprüfung. Wenn der Alter kleiner als 18 oder größer als 40 ist, wird eine Ausnahme geworfen
ageexception.py
# Python 3.x
class AgeException(Exception):
def __init__(self, msg, age ):
super().__init__(msg)
self.age = age
class TooYoungException(AgeException):
def __init__(self, msg, age):
super().__init__(msg, age)
class TooOldException(AgeException):
def __init__(self, msg, age):
super().__init__(msg, age)
# Die Funktion prüft das Alter. Sie kann die Ausnahme werfen.
def checkAge(age):
if (age < 18) :
# Wenn das Alter kleiner als 18 ist, wird eine Ausnahme geworfen. Die Funktion endet hier.
raise TooYoungException("Age " + str(age) + " too young", age)
elif (age > 40) :
# Wenn das Alter kleiner als 40 ist, wird eine Ausnahme geworfen
# Die Funktion endet hier.
raise TooOldException("Age " + str(age) + " too old", age);
# Wenn das Alter in dem Raum vom 18-40 liegt, wird die Code implementiert
print ("Age " + str(age) + " OK!");
Zum Beispiel
tryExceptDemo1.py
import ageexception
from ageexception import AgeException
from ageexception import TooYoungException
from ageexception import TooOldException
print ("Start Recruiting ...")
age = 11
print ("Check your Age ", age)
try :
ageexception.checkAge(age)
print ("You pass!")
except TooYoungException as e :
print("You are too young, not pass!")
print("Cause message: ", str(e) )
print("Invalid age: ", e.age)
except TooOldException as e :
print ("You are too old, not pass!")
print ("Cause message: ", str(e) )
print("Invalid age: ", e.age)
Das Beispiel durchführen
Start Recruiting ...
Check you Age 11
You are too young, not pass!
Cause message: Age 11 too young
Invalid age: 11
Das folgende Beispiel, wir fangen die Ausnahme durch die Ausnahme auf dem höheren Level. Auf dem höheren Level fangt es die Ausnahme und alle Sub-Ausnahmen.
tryExceptDemo2.py
import ageexception
from ageexception import AgeException
from ageexception import TooYoungException
from ageexception import TooOldException
print ("Start Recruiting ...")
age = 51
print ("Check your Age ", age)
try :
ageexception.checkAge(age)
print ("You pass!")
except AgeException as e :
print("You are not pass!")
print("type(e): ", type(e) )
print("Cause message: ", str(e) )
print("Invalid age: ", e.age)
Output:
Start Recruiting ...
Check you Age 51
You are not pass!
type(e): <class 'ageexceptioon.TooOldException'>
Cause message: Age 51 too old
Invalid age: 51
4. Der Block try-except-finally
Oben kennen wir das Ausnahmenfangen durch try-except lernen. Die volle Behandlung der Ausnahme ist try-except-finally. der Block finally wird immer implementiert trotzdem die Ausnahme bei Block try passiert oder nicht.
try - except - finally
try :
# Etwas hier machen
except Exception1 as e :
# Etwas hier machen.
except Exception2 as e :
# Etwas hier machen.
finally :
# Das Block finally wird immer implementiert.
# Etwas hier machen
Zum Beispiel
tryExceptFinallyDemo.py
def toInteger(text) :
try :
print ("-- Begin parse text: ", text)
# Eine Ausnahme kann hier geworfen werden (ValueError).
value = int(text)
return value
except ValueError as e :
# Falls 'text' kein Zahl ist, wird das Block 'except' implementiert
print ("ValueError message: ", str(e))
print ("type(e): ", type(e))
# 0 zurückgeben wenn ein Fehler ValueError auftritt.
return 0
finally :
print ("-- End parse text: " + text)
text = "001234A2"
value = toInteger(text)
print ("Value= ", value)
Zum Beispiel
-- Begin parse text: 001234A2
ValueError message: invalid literal for int() with base 10: '001234A2'
type(e): <class 'ValueError'>
-- End parse text: 001234A2
Value= 0
Das ist der Thread des Programms. Der Block finally wird immer implementiert
Der Befehl pass
Wenn Sie in den Block 'except' oder 'finally' nicht behandeln möchten, können Sie den Befehl 'pass' (pass statement). Der Befehl pass macht nichts, es ist wie ein Befehl null.
passStatementExample.py
print ("Three")
try :
value = 10 / 0;
except Exception as e:
pass
print ("Two")
print ("One")
print ("Let's go")
Output:
Three
Two
One
Let's go
5. Die Ausnahme weiter werfen
Bei der Behandlung der Ausnahme können Sie diese Ausnahme fangen und behandeln oder sie weiter werfen (rethrow)
reRaiseExceptionDemo1.py
def checkScore(score) :
if score < 0 or score > 100:
raise Exception("Invalid Score " + str(score) )
def checkPlayer(name, score):
try :
checkScore(score)
except Exception as e :
print ("Something invalid with player: ",name, ' >> ', str(e) )
# re throw exception.
raise
# ------------------------------------------
checkPlayer("Tran", 101)
Zum Beispiel: die Ausnahme durch eine andere Ausnahme fangen und weiter werfen (rethrow)
reRaiseExceptionDemo2.py
def checkScore(score) :
if score < 0 or score > 100:
raise Exception("Invalid Score " + str(score) )
def checkPlayer(name, score):
try :
checkScore(score)
except Exception as e :
print ("Something invalid with player: ",name, ' >> ', str(e) )
# throw new exception.
raise Exception("Something invalid with player: "+ name + " >> "+ str(e))
# ------------------------------------------
checkPlayer("Tran", 101)
6. Eine Ausnahme (eine Exception) in einer anderen Exception einpacken
Python erlaubt eine Ausnahme zu fangen und eine neue Ausnahme zu werfen. Die neue kann die Information der ersten Ausnahmen speichern, die Sie durch das Attribut __cause__ zugreifen
Syntax
try :
# Etwas hier machen
except Exception as e :
raise OtherException("Message...") from e
Das Beispiel voll anschauen
wrapExceptionDemo.py
# Python 3.x:
# Die Ausnahme von dem Geschlecht
class GenderException(Exception):
def __init__(self, msg):
super().__init__(msg)
# Die Ausnahme von der Sprache.
class LanguageException(Exception):
def __init__(self, msg):
super().__init__(msg)
class PersonException(Exception):
def __init__(self, msg):
super().__init__(msg)
# Die Funktion kann GenderException werfen.
def checkGender(gender):
if gender != 'Female' :
raise GenderException("Accept female only")
# Die Funktion kann LanguageException werfen.
def checkLanguage(language):
if language != 'English' :
raise LanguageException("Accept english language only")
def checkPerson(name, gender, language):
try :
# GenderException werfen können
checkGender(gender)
# LanguageException werfen können.
checkLanguage(language)
except Exception as e:
# Die Exception fangen und die anderen Exception werfen.
# Die neue Ausnahme hat die Information __cause__ = e.
raise PersonException(name + " does not pass") from e
# --------------------------------------------------------
try :
checkPerson("Nguyen", "Female", "Vietnamese")
except PersonException as e:
print ("Error message: ", str(e) )
# GenderException oder LanguageException
cause = e.__cause__
print ('e.__cause__: ', repr(cause))
print ("type(cause): " , type(cause) )
print (" ------------------ ")
if type(cause) is GenderException :
print ("Gender exception: ", cause)
elif type(cause) is LanguageException:
print ("Language exception: ", cause)
Output:
Error message: Nguyen does not pass
e.__cause__: LanguageException('Accept english language only',)
type(cause): <class '__main__.LanguageException'>
------------------
Language exception: Accept english language only
Anleitungen Python
- Lookup Python-Dokumentation
- Verzweigung in Python
- Die Anleitung zu Python Function
- Klasse und Objekt in Python
- Vererbung und Polymorphismus in Python
- Die Anleitung zu Python Dictionary
- Die Anleitung zu Python Lists
- Die Anleitung zu Python Tuples
- Die Anleitung zu Python Date Time
- Stellen Sie mit PyMySQL eine Verbindung zur MySQL-Datenbank in Python her
- Die Anleitung zu Python Exception
- Die Anleitung zu Python String
- Einführung in Python
- Installieren Sie Python unter Windows
- Installieren Sie Python unter Ubuntu
- Installieren Sie PyDev für Eclipse
- Konventionen und Grammatik-Versionen in Python
- Die Anleitung zum Python für den Anfänger
- Schleifen in Python
Show More