Hi.
Ich hab gerade mal so aus Spaß ein wenig über den Code geschaut: https://develop.participatoryculture.or ... le/item.py
Da viel mir dann auf, dass da try-Blöcke in try-Blöcken geschrieben werden.
zB zeile 598 3 try-Blöcke.
Oder 652.
Ich bin jetzt nur zu confused um darin irgendwie einen Sinn zu erkennen. Warum lässt man den übergeordneten try-Block nicht einfach weg?
Try-Block in Try-Block?
Normalerweise würde man sowas heute als try-except-finally Block schreiben. Früher konnte ein try nur ein except oder ein finally, aber nicht beide, enthalten. Deswegen musste man die Blöcke derart schachteln. try in einem except Block widerum ist doch nur logisch wenn man versuchen will, eine Ausnahmebehandlung zu nutzen, die selbst wieder schiefgehen könnte und dann Behandlung nötig hätte.
- b.esser-wisser
- User
- Beiträge: 272
- Registriert: Freitag 20. Februar 2009, 14:21
- Wohnort: Bundeshauptstadt B.
Ich rate mal (hab gerad' keine Lust auf 700 Zeilen Code ):Ich bin jetzt nur zu confused um darin irgendwie einen Sinn zu erkennen. Warum lässt man den übergeordneten try-Block nicht einfach weg?
- die try-blöcke sind nacheinander enstanden
- die try-Blöcke sind entstanden bevor
Code: Alles auswählen
try:
pass
except Exception, ex:
pass
except different_exxception, ex:
pass
else:
pass
finally:
pass
- so kann man verschiedene exceptions nacheinander behandeln (falls z.B. ein "except :" wieder eine Ausnahme auslöst)
hth, Jörg
Code: Alles auswählen
597 try:
598 try:
599 self.releaseDateObj = datetime(*self.entry.enclosures[0].modified_parsed[0:7])
600 except:
601 try:
602 self.releaseDateObj = datetime(*self.entry.modified_parsed[0:7])
603 except:
604 self.releaseDateObj = datetime.min
605 finally:
606 self.endRead()
Ich versteh da jetzt nur nicht den Sinn von dem äußerem Try-Block.
Kann man den nicht einfach weglassen?
- birkenfeld
- Python-Forum Veteran
- Beiträge: 1603
- Registriert: Montag 20. März 2006, 15:29
- Wohnort: Die aufstrebende Universitätsstadt bei München
Jain. Momentan, ja (außer "datetime.min" ist ein AttributeError), aber wenn im letzten except-Block mal mehr stehen sollte machts durchaus einen Unterschied.Nocta hat geschrieben:Mal als Beispiel aus dem Code zitiert.Code: Alles auswählen
597 try: 598 try: 599 self.releaseDateObj = datetime(*self.entry.enclosures[0].modified_parsed[0:7]) 600 except: 601 try: 602 self.releaseDateObj = datetime(*self.entry.modified_parsed[0:7]) 603 except: 604 self.releaseDateObj = datetime.min 605 finally: 606 self.endRead()
Ich versteh da jetzt nur nicht den Sinn von dem äußerem Try-Block.
Kann man den nicht einfach weglassen?
- birkenfeld
- Python-Forum Veteran
- Beiträge: 1603
- Registriert: Montag 20. März 2006, 15:29
- Wohnort: Die aufstrebende Universitätsstadt bei München
Nein, denn dann würde das "finally" ja nicht ausgeführt, wenn gar keine Exception aufträte.Nocta hat geschrieben:Ah Okay, jetzt verstehe ich den Sinn.
Quasi das selbe, wie wenn man den try-Block ins letzte except packen würde?
- birkenfeld
- Python-Forum Veteran
- Beiträge: 1603
- Registriert: Montag 20. März 2006, 15:29
- Wohnort: Die aufstrebende Universitätsstadt bei München
Hab ich deinen letzten Post falsch verstanden?
Weiß ich nicht.
Ich meinte sowas:
wird zu
Wird dann finally nicht auch ausgeführt?
Aber wahrscheinlich sollte ich erstmal den Kater loswerden und dann anfangen über Python nachzudenken.
Ich meinte sowas:
Code: Alles auswählen
try:
try:
except:
try:
except:
finally:
Code: Alles auswählen
try:
except:
try:
except:
try:
except: pass
finally:
Aber wahrscheinlich sollte ich erstmal den Kater loswerden und dann anfangen über Python nachzudenken.
- birkenfeld
- Python-Forum Veteran
- Beiträge: 1603
- Registriert: Montag 20. März 2006, 15:29
- Wohnort: Die aufstrebende Universitätsstadt bei München
Das finally kannst du aber in diesem Fall nicht weglassen:
Code: Alles auswählen
try:
try:
except:
try:
except: raise
finally:
- birkenfeld
- Python-Forum Veteran
- Beiträge: 1603
- Registriert: Montag 20. März 2006, 15:29
- Wohnort: Die aufstrebende Universitätsstadt bei München
Ich denke du musst mir jetzt doch mal erklären, was du mit
gemeint hast.Quasi das selbe, wie wenn man den try-Block ins letzte except packen würde?
Ich meinte damit das, was ich mit den beiden Pseudocodebeispielen gezeigt habe.
Dass man das äußere try wegmacht und dies dafür im letzten except schreibt.
Irgendwie scheinen wir aneinander vorbeizureden bzw ich bin zu dumm um das richtig zu verstehen
Dass man das äußere try wegmacht und dies dafür im letzten except schreibt.
Irgendwie scheinen wir aneinander vorbeizureden bzw ich bin zu dumm um das richtig zu verstehen
- birkenfeld
- Python-Forum Veteran
- Beiträge: 1603
- Registriert: Montag 20. März 2006, 15:29
- Wohnort: Die aufstrebende Universitätsstadt bei München
Ah! Sorry. Aber try-except-finally gibt es halt erst seit Python 2.5.