@snafu: Das ist keine Regel um der Regel willen sondern einfach saubere Programmierung die weniger fehleranfällig ist. Irgendwann kommt in dem Teil den man *nicht* auf die Ausnahme überprüfen möchte noch etwas hinzu oder man verändert nur eine Funktion woanders die in so einem ``try``-Block verwendet wird, und schon hat man sich potentiell einen Fehler eingebaut wenn man das Konstrukt *dann* nicht umbaut. Lieber gleich korrekten Code schreiben, beziehungsweise welchen der weniger leicht durch Änderungen fehlerhaft werden kann. Vor allem ist das ja gar keine grosse, komplizierte Sache die irgendwie besonderen Aufwand bedeuten würde beim schreiben. Was an dem Konstrukt unschön ist sehe ich auch nicht, im Gegenteil finde ich die Möglichkeit mit dem ``else`` sehr schön. Bei Sprachen wo es das nicht gibt, wird es tatsächlich unschön wenn man so einen Fall dann doch wieder mit Flags oder speziellen Fehlerwerten nach der Ausnahmebehandlung abarbeiten möchte. Dann müsste das nämlich so aussehen:
Code: Alles auswählen
idx = None
try:
idx = row.index("WOS:000300581200005")
except ValueError:
print('not found')
if idx is not None:
print(dateiname, row[58], idx)
Falls `idx` beliebige Werte annehmen kann, also auch `None`, müsste man sich extra einen „Sentinel”-Wert dafür erzeugen auf den man prüfen kann. Bei vielen statisch typisierten Sprachen geht nicht mal das, da muss man dann noch eine extra Variable für ein Flag einführen. Ich finde ``else`` zum ``except`` wirklich *schön*.