Ich habe ein Listenverständnis in Python, in dem jede Iteration eine Ausnahme auslösen kann.
Zum Beispiel , wenn ich habe:
eggs = (1,3,0,3,2)
[1/egg for egg in eggs]
Ich werde eine ZeroDivisionError
Ausnahme im 3. Element bekommen.
Wie kann ich mit dieser Ausnahme umgehen und die Ausführung des Listenverständnisses fortsetzen?
Ich kann mir nur vorstellen, eine Hilfsfunktion zu verwenden:
def spam(egg):
try:
return 1/egg
except ZeroDivisionError:
# handle division by zero error
# leave empty for now
pass
Aber das sieht für mich etwas umständlich aus.
Gibt es eine bessere Möglichkeit, dies in Python zu tun?
Hinweis: Dies ist ein einfaches Beispiel (siehe " zum Beispiel " oben), das ich erfunden habe, weil mein reales Beispiel einen Kontext erfordert. Ich bin nicht daran interessiert, Fehler durch Teilen durch Null zu vermeiden, sondern Ausnahmen in einem Listenverständnis zu behandeln.
ndarray
mit den entsprechenden Einstellungen in verwenden können np.seterr
. Das würde dazu führen 1/0 = nan
. Mir ist jedoch klar, dass sich dies nicht auf andere Situationen verallgemeinert, in denen dieses Bedürfnis entsteht.
[1/egg except ZeroDivisionError: None for egg in (1,3,0,3,2)]
. Aber es ist immer noch im Entwurfsmodus. Mein Bauchgefühl ist, dass es nicht akzeptiert wird. Imho-Ausdrücke können zu chaotisch werden (Überprüfung mehrerer Ausnahmen, komplexere Kombinationen (mehrere logische Operatoren, komplexe Verständnisse usw.)