Seite 1 von 1

Alternative zu sys.exit()

Verfasst: Dienstag 23. Oktober 2007, 13:41
von heidiweber
Hallo

gibt es eine Alternative zu sys.exit() ?

Ich benutze Python aus einem anderen Programm (SPSS --> ist ein Statistikprogramm) heraus. Wenn ich jetzt sys.exit() aufrufe, "stürzt" das Programm ab bzw. es wird der interne Programm-Prozessor von SPSS abgeschossen.

Ich möchte eigentlich nur erreichen, dass die Verarbeitung beendet wird - z.B. nachdem ein Fehler aufgetreten ist (Verwende try-catch-Block).

Sowas in der Art:

Code: Alles auswählen


try:
 spss.Submit("foo.")
except:
 print "That command did not work!, Error level =  ", spss.GetLastErrorLevel(), sys.exc_info()[0]
 sys.exit() #Abbrechen bei Fehler abbrechen --> Funktioniert leider nicht
 
print "\n\nEs ist kein Fehler aufgetreten --> Verarbeitung soll normal weiterlaufen"

Habt ihr vielleicht eine Alternative dazu?
Vielen Dank
cu
Heidi

Re: Alternative zu sys.exit()

Verfasst: Dienstag 23. Oktober 2007, 13:48
von keppla
Ich glaube, ich verstehe noch nicht so ganz, was du genau möchtest. Wenn das Programm bei einem Fehler abbrechen soll, wozu Fängst du die Excpetion dann?
Alternativen wären explizites weiterwerfen der Exception in der Catch-Clause oder das verlagern des Codes in eine Funktion, aus der du dann mit return fliehen kannst.

Verfasst: Dienstag 23. Oktober 2007, 13:49
von Rebecca
Mmh, du koenntst das Programm einfach auslaufen lassen, wenn ein Fehler auftrat:

Code: Alles auswählen

try:
  spss.Submit("foo.")
except:
  print "That command did not work!, Error level =  " ...
else:
  print "\n\nEs ist kein Fehler aufgetreten --> Verarbeitung soll normal weiterlaufen"

Verfasst: Dienstag 23. Oktober 2007, 13:51
von BlackJack
Wenn SPSS wirklich kein `sys.exit()` mag, dann ist das aber blöd gelöst.

In diesem konkreten Fall kann man ganz einfach mit ``else`` arbeiten:

Code: Alles auswählen

try:
    spss.Submit('foo.')
except:
    print ('That command did not work!, Error level = %s %s'
           % (spss.GetLastErrorLevel(), sys.exc_info()[0]))
else:
    print ('\n\nEs ist kein Fehler aufgetreten -->'
           ' Verarbeitung soll normal weiterlaufen')
Ansonsten würde ich einfach beim Aufruf der Hauptfunktion `SystemExit` abfangen und ignorieren.

Code: Alles auswählen

if __name__ == '__main__':
    try:
        main()
    except SystemExit:
        pass

Verfasst: Dienstag 23. Oktober 2007, 14:11
von heidiweber
Hmm - glaube ich habe viel zu kompliziert gedacht.

Also sys.exit() funktioniert definitiv nicht.

Ich glaube, ich mache das mit dem Else-Zweig --> ist zwar nervig wegen dem Einrücken, falls noch viel Code kommt, aber naja - man kann nicht alles haben...

Dank euch nochmals für die Hilfe
cu
Heidi

Verfasst: Dienstag 23. Oktober 2007, 14:44
von BlackJack
Wieso ist das einrücken nervig? Jeder vernünftige Editor rückt nach einem Druck auf die Eingabetaste den Cursor automatisch soweit ein wie in der letzten nicht-leeren Zeile. Editoren mit Python-Unterstützung erkennen sogar automatisch bei Schleifen, Funktions-, Klassen-, und Methodendefinitionen, das sie weiter einrücken müssen.

Verfasst: Dienstag 23. Oktober 2007, 14:51
von pyStyler
heidiweber hat geschrieben:Hmm - glaube ich habe viel zu kompliziert gedacht.

Also sys.exit() funktioniert definitiv nicht.

Ich glaube, ich mache das mit dem Else-Zweig --> ist zwar nervig wegen dem Einrücken, falls noch viel Code kommt, aber naja - man kann nicht alles haben...

Dank euch nochmals für die Hilfe
cu
Heidi
meine güte was seit ihr immer für welche! wegen zwei Zeilen einrücken findest du es blöd?

Verfasst: Dienstag 23. Oktober 2007, 15:18
von Rebecca
Naja, in ihrem richtigen Programm wird an der Stelle wahrscheinlich etwas mehr stehen. Dann koennte man es nett in Funktionen verpacken.