catch error in for loop iterator

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
kamsen
User
Beiträge: 3
Registriert: Donnerstag 5. April 2012, 22:48

Hallo zusammen,

ich ein Problem zu dem ich grad keine Lösung finde, aber ich kenn mich mit der Exceptionbehandlung auch net so gut aus.
Es geht um folgendes.

Ich benutze ein package zum laden von *txt files. Dieses package liest die Zeilen der Datei aus und wandelt sie in eigene Objekte um. Bei dieser Umwandlung wird die Zeile auf Korrektheit geprüft (bestimmtes Format). Wenn die Zeile nicht der Objektdefinition entspricht wird ein Fehler geworfen und das Programm beendet.
Pseudocode mäßig würde mein relevanter code ungefähr so ausehen:

Code: Alles auswählen

special_class = txtfileobject

for object in special_class:
         dosomething()
In der Forschleife wird dann irgendwann ein bestimmter Fehler geworfen, wenn die Zeile aus der Textdatei eben nicht der Definition für den Reader entspricht.
Ich suche eine Lösung mit der ich folgendes tun kann:

1) den Code des packages so lassen wie er ist (benutze das nicht alleine)
2) wenn die Zeile nicht dem FOrmat entspricht, dann soll in einen catch Block gewechselt werden, wo ich meine eig. Fehlerbehandlung schreiben kann
3) Es ist keine alternative die txt files im Vorfeld nach dem Fehler zu filtern / bereinigen, da es im eigentlichen Sinne kein Fehler ist (nur eine Besonderheit).
4) das package beeinhaltet viele schnelle Implementierung (eben auch den Reader) die ich gerne behalten würde ;)


Ich hoffe das ganze ist anschaulich genug dargestellt.

Grüße
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

kamsen hat geschrieben: Wenn die Zeile nicht der Objektdefinition entspricht wird ein Fehler geworfen und das Programm beendet.
Hier musst Du mal genauer werden. Die Funktion aus dem separaten Modul wirft eine Exception und Dein eigenes Modul fängt diese nicht ab und dadurch kommt es zur Beendigung des Programms? Oder ist der Sachverhalt anders?

Wenn dem so ist, wie ich mir das denke, dann musst Du doch nur diese Exception abfangen:

Code: Alles auswählen

try:
    # call_the_external_function
except TheException:
    # Dein Code zur Behandlung
:K
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
kamsen
User
Beiträge: 3
Registriert: Donnerstag 5. April 2012, 22:48

Die angesprochene Fehlerbehandlung kommt von dem importierten Modul und wird für object geworfen.

Mh also ich kanns grad nicht mehr ausprobieren, aber ich werd morgen mal ein bissle rumhacken.
Aber ich wüsste nicht, wie ich dem Generator(?) das beibringen soll rein vom Konzept her müsste ja so was wie:

Code: Alles auswählen

try:
for object in file:
      blaaa()
except MyException:
     for line in file:
           blaaaaa2()

gemacht werden. Aber das sieht total fremd aus für mich.

Diese Art der Fehlerbehandlung kenn ich zwar, aber ich konnte nicht glauben, dass das so geht- wie gesagt, probier ich später mal.

Danke erstmal ;)

Grüße
kamsen
User
Beiträge: 3
Registriert: Donnerstag 5. April 2012, 22:48

So ich hab jetzt mal rumprobiert und bin zu dem Schluss gekommen, dass das Problem nicht außerhalb des packages gelöst werden kann.

Das Generatorobjekt lässt mich die Zeile nicht "normal" (nicht als Objekt des packages) zurückgeben.

Im code des packages hab ich einfach den except Block mit yield line erweitert. Im try Block steht normal das yield object.


Grüße
Antworten