Alternative zu sys.exit()

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
heidiweber
User
Beiträge: 8
Registriert: Dienstag 23. Oktober 2007, 09:25

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
Benutzeravatar
keppla
User
Beiträge: 483
Registriert: Montag 31. Oktober 2005, 00:12

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.
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

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"
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
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
heidiweber
User
Beiträge: 8
Registriert: Dienstag 23. Oktober 2007, 09:25

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
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.
pyStyler
User
Beiträge: 311
Registriert: Montag 12. Juni 2006, 14:24

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?
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Naja, in ihrem richtigen Programm wird an der Stelle wahrscheinlich etwas mehr stehen. Dann koennte man es nett in Funktionen verpacken.
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Antworten