2016-04-20 6 views
1
try: 
    raise KeyError() 
except KeyError: 
    print "Caught KeyError" 
    raise Exception() 
except Exception: 
    print "Caught Exception" 

Wie erwartet Exception() auf der 5. Zeile Anheben nicht in der endgültigen except Exception Klausel gefangen. Um fangen die die Ausnahme innerhalb des except KeyError Block, muss ich noch mal try...except wie folgt hinzufügen und die endgültige except Exception Logik duplizieren:Python/Außer mit mehreren Ausnahme Blöcke

try: 
    raise KeyError() 
except KeyError: 
    print "Caught KeyError" 
    try: 
     raise Exception() 
    except Exception: 
     print "Caught Exception" 
except Exception: 
    print "Caught Exception" 

In Python ist es möglich, den Fluss der Ausführung der endgültigen except Exception passieren Block wie ich versuche zu tun? Wenn nicht, gibt es Strategien, um die Duplizierung von Logik zu reduzieren?

+2

Ja. Setzen Sie den Code, den Sie verwenden, um 'Exception' in einer Funktion zu behandeln. Dann rufe diese Funktion an beiden Orten auf. – kindall

+0

'except'-Klauseln fangen nur Fehler ein, die im' try' geworfen werden; Andernfalls könnten Sie nicht erneut erhöhen, wenn Sie möchten. – jonrsharpe

+1

hmmm, kannst du erklären, was du erreichen willst? Der Standardansatz, eine abgefangene Ausnahme wieder aufzuheben, die Sie nicht behandelt haben, ist 'raise', ohne etwas anderes. Das kann in diesem Fall Ihren Anforderungen entsprechen oder nicht. Kann nicht von Ihrem Code allein erzählen. –

Antwort

4

Sie könnten eine andere Ebene der try Verschachtelung hinzufügen:

try: 
    try: 
     raise KeyError() 
    except KeyError: 
     print "Caught KeyError" 
     raise Exception() 
except Exception: 
    print "Caught Exception"