Hallo,
ist es in Python möglich, dass bei einer Fehlerzeile das Programm nicht abbricht sonder einfach mit der nächsten Zeile weitermacht?
Ich meine damit jetzt nicht einen try/except, denn dann müsste ich ja um jede Codezeile einen eigenen Block bauen.
In PHP ist es ja so, dass er bei einem Fehler einfach weitermacht und nicht das ganze Programm abbricht.
Gruß
Michael
Bei Fehler mit nächster Zeile weitermachen?
-
- User
- Beiträge: 29
- Registriert: Freitag 16. Mai 2003, 09:05
- Wohnort: Pfaffenhofen
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Dein Vorgehen erinnert eher an VBs On Error Resume Next um genau zu sein. Nein, dies ist in Python afaik nicht möglich und es ist auch gut so. Ausnahmen werden geworfen um auf diese zu reagieren, nicht um sie zu ignorieren, denn wenn irgendwo ein unbehandelter Fehler ist, dann man davon ausgehen, dass sich bald eine Fehlerkaskade anhäuft.
Warum willst du überhaupt so etwas machen? Das kann man doch sicherlich auch sauberer lösen.
Warum willst du überhaupt so etwas machen? Das kann man doch sicherlich auch sauberer lösen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
- User
- Beiträge: 29
- Registriert: Freitag 16. Mai 2003, 09:05
- Wohnort: Pfaffenhofen
Naja, es ist halt dann blöd wenn im Programm schon vorher einiges passiert ist, denn dann muss man wieder alles auf Anfangs-Situation stellen und nochmal komplett durchlaufen lassen, anstatt z.B. einfach ein kaputtes Feld zu beheben.Leonidas hat geschrieben:Dein Vorgehen erinnert eher an VBs On Error Resume Next um genau zu sein. Nein, dies ist in Python afaik nicht möglich und es ist auch gut so. Ausnahmen werden geworfen um auf diese zu reagieren, nicht um sie zu ignorieren, denn wenn irgendwo ein unbehandelter Fehler ist, dann man davon ausgehen, dass sich bald eine Fehlerkaskade anhäuft.
Warum willst du überhaupt so etwas machen? Das kann man doch sicherlich auch sauberer lösen.
Es kann zudem immer wieder passieren dass in einem Zweig, der z.B. nicht so oft benutzt wird ein Fehler auftaucht, oder ein versehentlich gelöschter Tab.
Von daher vermittelt mir ein Programm das auf jeden Fall versucht das Programm zu ende zu bringen einen stabileren Eindruck...
Es ist auch schade, dass Pyton nicht so eine umfassende vorherige Syntax und Logik-Prüfung hat wie Java.
Ich gebe da Leonidas Recht, aber du kannst ja mal an einem Beispiel zeigen, was du genau meinst.
Vielleicht macht es ja tatsächlich Sinn, oder lässt sich durch einen ganz anderen Progammansatz lösen (was ich eher glaube).
So ganz nebenbei:
Wie machst du für den Benutzer kenntlich, dass da ein Feld/Zweig nicht korrekt bearbeitet wurde?
Bis zu einem Fehler angelegte Einstellungen kannst du doch zwischenspeichern, also eine Session zB mit Pickle speichern.
cu Sebastian
Vielleicht macht es ja tatsächlich Sinn, oder lässt sich durch einen ganz anderen Progammansatz lösen (was ich eher glaube).
So ganz nebenbei:
Wie machst du für den Benutzer kenntlich, dass da ein Feld/Zweig nicht korrekt bearbeitet wurde?
Bis zu einem Fehler angelegte Einstellungen kannst du doch zwischenspeichern, also eine Session zB mit Pickle speichern.
cu Sebastian
-
- User
- Beiträge: 1790
- Registriert: Donnerstag 28. Oktober 2004, 16:33
- Wohnort: Graz, Steiermark - Österreich
- Kontaktdaten:
Vielleicht willst du ja sowas:
Der obere Abschnitt deklariert einen dekorator, der bei fehlerfall einfach None zurückgibt.
Code: Alles auswählen
>>> def runorfail(f):
... def wrapped(*args, **kwargs):
... try:
... return f(*args, **kwargs)
... except:
... return None
... return wrapped
...
>>> @runorfail
... def permanent_broken(name):
... raise ValueError, "%r ist kein valider Wert." % name
...
>>> t = permanent_broken("Hallo Welt")
>>> t
>>> def permanent_broken(name):
... raise ValueError, "%s ist kein valider Wert." % name
...
>>> t = permanent_broken("Hallo Welt")
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "<stdin>", line 2, in permanent_broken
ValueError: Hallo Welt ist kein valider Wert.
TUFKAB – the user formerly known as blackbird
also ich finde es auch absoluten humbug sowas zu machen! Ich will ein Programm das funktioniert und nicht, was einfach nur den Eindruck macht, das es das tut!
Sonst würde ich ja Windoff und nicht LInux benutzten
Du solltest lieber ordentlich coden anstatt einfahc durchlaufen zu lassen! UNd zu Not reichen die try/except vollkommen aus!
SigMA
Sonst würde ich ja Windoff und nicht LInux benutzten

Du solltest lieber ordentlich coden anstatt einfahc durchlaufen zu lassen! UNd zu Not reichen die try/except vollkommen aus!
SigMA
Leichtdio.de - Das Kreativ-Blog
http://www.leichtdio.de
http://www.leichtdio.de
-
- User
- Beiträge: 29
- Registriert: Freitag 16. Mai 2003, 09:05
- Wohnort: Pfaffenhofen
z.B. in einer Schnittstelle: da müssen verschiedene Felder in entsprechende Typen umgewandelt werden z.B. String zu Zahl, String zu String mit bestimmter Länge (20 Zeichen) usw.
Da währe mir es lieber das Programm gibt einen Fehler aus und macht mit der nächsten Zeile weiter, wie wenn es einfach mittendrin abbricht.
In der Datenbank erkennt man dann eh spätestens den Fehler wenn z.B. in Alter -1 oder in Strasse ein teil fehlt.
Und um jede Umwandlung einen try - except bauen ist auch ein wenig übertrieben.
Da währe mir es lieber das Programm gibt einen Fehler aus und macht mit der nächsten Zeile weiter, wie wenn es einfach mittendrin abbricht.
In der Datenbank erkennt man dann eh spätestens den Fehler wenn z.B. in Alter -1 oder in Strasse ein teil fehlt.
Und um jede Umwandlung einen try - except bauen ist auch ein wenig übertrieben.
das nennt sich dann aber nicht programmieren ...
Versuch doch die einzelnen Aufgaben in Funktionen zu packen die dann im Fall eines Fehlers einen Defaultwert zurückgeben.
Wenn dir das zu aufwendig ist, pack einfach mehrere Aufgaben in eine Funktion, fällt was aus, fehlt halt ein Block und es läuft aber weiter.
Oder sowas:
In dem Array kann ja alles mögliche stehen. Funktionsaufrufe, Ausdrücke usw..

Versuch doch die einzelnen Aufgaben in Funktionen zu packen die dann im Fall eines Fehlers einen Defaultwert zurückgeben.
Wenn dir das zu aufwendig ist, pack einfach mehrere Aufgaben in eine Funktion, fällt was aus, fehlt halt ein Block und es läuft aber weiter.
Oder sowas:
Code: Alles auswählen
for i in aufgabenarray:
try:
erg = i
except:
erg = defaultwert
Zuletzt geändert von mr.hide am Mittwoch 4. Januar 2006, 17:34, insgesamt 1-mal geändert.
Grüße
Matthias
- Fluchen befreit von Kummer und Leid -
Matthias
- Fluchen befreit von Kummer und Leid -
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Bitte keine Flamewars. Linux hat auch viele Sachen die nicht immer 100%ig funktionieren.SigMA hat geschrieben:Sonst würde ich ja Windoff und nicht LInux benutzten
Und wenn man nicht in die Datenbank schaut dann merkt man den Fehler nicht und rechnet später mit falschen Werten.michael070380 hat geschrieben:In der Datenbank erkennt man dann eh spätestens den Fehler wenn z.B. in Alter -1 oder in Strasse ein teil fehlt.
Warum also nicht den Fehler dort abfangen wo er passiert und ihn nicht vergraben, bis vielleicht jemand darüber stolpert?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Oder du startest Teilprogramme als Thread, ist performanter und wenn die Daten unabhängig von einander sind ist das auch kein großer Akt.
Allerdings wird das immer eine Software sein, die ich weder verkaufen noch kaufen würde.
Gerade einen ordentliches Exceptionhandling spricht doch für Qualität.
PS: die neuen python code tags sind einfach klasse
Allerdings wird das immer eine Software sein, die ich weder verkaufen noch kaufen würde.
Gerade einen ordentliches Exceptionhandling spricht doch für Qualität.
PS: die neuen python code tags sind einfach klasse
Grüße
Matthias
- Fluchen befreit von Kummer und Leid -
Matthias
- Fluchen befreit von Kummer und Leid -