[Python-de] Re: [Python-de] RE: [Python-de] Versuch über die Ausnahmebedingung

Walter Dörwald walter at livinglogic.de
Wed Dec 11 17:23:08 EST 2002


Gerson Kurz wrote:

> Walter Dörwald schreibt
> 
>>Mag ja sein, aber im Normalfall sieht Code wohl eher so aus:
>>if open():
>>    if tuwas():
>>       if tunochwas():
>>          return True
>>       else:
>>          return False
>>    else:
>>       return False
>>else:
>>    return False
>>
>>und da finde ich
>>
>>open()
>>tuwas()
>>tunochwas()
>>
>>wesentlich übersichtlicher!
> 
> 
> Du hast aber in deinem Beispiel vergessen, das in try/except zu klammern und
> die exceptions aufzudröseln...

Eben nicht. Ich meinte, der überwiegende Teil normalen Programmcodes
ignoriert Fehler.

> Nun gut, es ist eine Stilfrage, ich will mal nicht so sein.
> 
> Aber, wo wir schon beim Kampf der praxisnahen Beispiele sind, hier kommt ein
> noch simpleres:
> 
> if open():
>     tuwas()
>     close()
> 
> vs.
> 
> try:
>     open()
>     try:
>         tuwas()
>     finally:
>         close()
> except:
>     pass

KeyboardInterrupt und SystemExit abzufangen ist böse!

> Das scheinen mir zwei äquivalente Versionen zu sein, denn beachte: Close
> wird aufgerufen, auch wenn tuwas() fehlschlägt, aber nur wenn open()
> geklappt hat.

Die beiden Versionen sind nur dann äquivalent, wenn Du wirklich alle
Fehler unterdrücken willst. Angenommen Dein Code soll das Auftreten
eines Fehlers nach oben weitermelden. Dann sehen die beiden Versionen
folgendermaßen aus:

res = open()
if not res:
    res = tuwas()
    close()
return res

vs.

open()
try:
    tuwas()
finally:
    close()

Das sieht doch schon besser aus.

Was ich damit sagen will ist folgendes: Im Normalfall überwiegt der
Vorteil, daß Du Fehler komplett ignorieren (d.h. unbehandelt lassen
und Deinem Aufrufer zur Behandlung überlassen) kannst, den Nachteil,
daß Du ein if durch try/except/finally ersetzen mußt, bei weitem.

Bis demnächst,
    Walter Dörwald





More information about the Python-de mailing list