Bei dieser Art von Anweisung handelt es sich um eine Mehrfachverarbeitungsmethode mit mehreren Ausnahmeanweisungen. Lassen Sie uns die Verschachtelung von Try...Except-Anweisungen anhand eines Beispiels lernen.
deftest():n=int(input('Es gibt 3 Anweisungen zum Testen, bitte wählen Sie (1/2/3):')) ifn==1: #keyError Ausnahme my_dict={'dotcpp':123}print ( my_dict['dot'])elifn==2:#IndexError Ausnahme my_list=[1,2,3,4,5]print(my_list[100])eli fn==3:#NameError-Ausnahme print('nicht vorhandene Variable dotcpp:',dotcpp)try:try:try:test()exclusKeyError:print('KeyError-Ausnahme')außerIndexError:print('IndexError-Ausnahme')außerNameError: print('NameError-Ausnahme')
Wir haben jeweils 1/2/3 getestet und die Ausgabeergebnisse sind wie folgt:
Es müssen 3 Anweisungen getestet werden, bitte auswählen (1/2/3): 1KeyError-Ausnahme. Es müssen 3 Anweisungen getestet werden, bitte auswählen (1/2/3): 2IndexError-Ausnahme. Es müssen 3 Anweisungen getestet werden, bitte auswählen (1/ 2/3): 3NameError-Ausnahme
In diesem Beispiel geben wir zunächst ein Urteil n in die definierte Funktion ein, geben dann drei Ausnahmesituationen basierend auf dem Wert von n an und verschachteln dann drei try..exclusive-Anweisungen am Ende, d. h. Das Ergebnis von Die test()-Anweisung durchläuft drei Beurteilungsebenen.
Ein vollständiger Ausnahmebehandlungsmechanismus ist untrennbar mit der „finally “-Anweisung verbunden. Die Funktion dieser Anweisung besteht darin, dass der Code unter der „finally“-Anweisung ausgeführt wird, unabhängig davon, ob eine Ausnahme auftritt.
try:blockexclusive[typeerror]:deal1finally:deal2
Schauen wir uns diese Struktur anhand eines Beispiels an:
deftest():n=int(input('Bitte geben Sie eine Ganzzahl ein:'))print(n)try:test()exclusKeyError:print('KeyError-Ausnahme')finally:print('finally-Anweisung wurde ausgeführt')
Geben wir jeweils 6 und dotcpp ein, um die Ausgabe zu sehen:
Bitte geben Sie eine Ganzzahl ein: 55finally-Anweisung wurde ausgeführt Bitte geben Sie eine Ganzzahl ein: dotcppfinally-Anweisung wurde ausgeführt Traceback(mostrecentcalllast):FileC:/Users/test.py,line5,in<module> test()FileC:/Users/test.py,line2,intestn=int(input('Bitte geben Sie eine Ganzzahl ein:'))ValueError: invalidliteralforint()withbase10:'dotcpp'
Anhand dieses Beispiels können wir erkennen, dass die final-Anweisung unabhängig davon ausgeführt wird, ob in unserem Programm eine Ausnahme auftritt.
Die finale Anweisung, die wir oben kennengelernt haben, ist eine Anweisung, die unabhängig davon ausgeführt wird, ob in der Anweisung eine Ausnahme auftritt. Die try...exclusive...else-Anweisung, die wir unten lernen werden, wird nur ausgeführt, wenn keine Ausnahme im Programm auftritt. Seine Syntaxstruktur ist:
try:blockexclusive[typeerror]:deal1else:deal2
Schauen wir uns unten ein Beispiel an:
deftest():n=int(input('Bitte geben Sie eine Ganzzahl ein:'))print('Der Eingabewert ist:',n)try:test()exclusValueError:print('ValueError-Ausnahme')else:print(' Aktuell Im Programm ist keine Ausnahme aufgetreten‘)
Die Ausgabe ist:
Bitte geben Sie eine Ganzzahl ein: 5. Der Eingabewert ist: 5. Im aktuellen Programm gibt es keine Ausnahme.
Wenn wir den Wert dotcpp eingeben
Bitte geben Sie eine Ganzzahl ein: dotcppValueError-Ausnahme
Wir können sehen, dass die else-Anweisung nicht ausgeführt wird, wenn das Programm abnormal ist. Es ist nicht schwierig, diese Anweisungen zu unterscheiden. Sie können diese häufig verwendeten Ausnahmebehandlungsanweisungen anhand von Beispielen üben.