Programm beenden (geloest)

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
Flo668
User
Beiträge: 39
Registriert: Mittwoch 23. Juli 2008, 10:41

Hi,

ich weiss, dass es ne ganz banale Frage ist, aber mit welchem Befehl beende ich ein Programm?
Ich finde das einfach nirgends.

Beispiel:







Code: Alles auswählen


try:
   
    anweisungen()

except:
    
    zeigeExceptioninMessageBox()
    beendeProgramm()



Danke!
Zuletzt geändert von Flo668 am Mittwoch 3. September 2008, 10:38, insgesamt 1-mal geändert.
kaschu
User
Beiträge: 25
Registriert: Sonntag 25. Februar 2007, 14:15

suchst Du sys.exit(...)?
Flo668
User
Beiträge: 39
Registriert: Mittwoch 23. Juli 2008, 10:41

Ja, suchte ich. Danke
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

kaschu hat geschrieben:suchst Du sys.exit(...)?
Ist sogar ein BuiltIn ;) -> `exit()'
Fabian Kochem
User
Beiträge: 36
Registriert: Mittwoch 5. April 2006, 14:11
Wohnort: Köln

Oder, der Vollständigkeit halber:

raise SystemExit
kaschu
User
Beiträge: 25
Registriert: Sonntag 25. Februar 2007, 14:15

Mal zwei Fragen dazu: wo finde ich die eingebaute Funktion exit() dokumentiert? Übersehe ich etwas in http://docs.python.org/lib/built-in-funcs.html?

Und zweitens: was wäre denn best practice? sys.exit(), exit() oder raise SystemExit. Wobei ich Letzteres intuitiv bevorzugen würde.

Gruß
kaschu
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

exit( [arg])

Exit from Python. This is implemented by raising the SystemExit exception, so cleanup actions specified by finally clauses of try statements are honored, and it is possible to intercept the exit attempt at an outer level. The optional argument arg can be an integer giving the exit status (defaulting to zero), or another type of object. If it is an integer, zero is considered ``successful termination'' and any nonzero value is considered ``abnormal termination'' by shells and the like. Most systems require it to be in the range 0-127, and produce undefined results otherwise. Some systems have a convention for assigning specific meanings to specific exit codes, but these are generally underdeveloped; Unix programs generally use 2 for command line syntax errors and 1 for all other kind of errors. If another type of object is passed, None is equivalent to passing zero, and any other object is printed to sys.stderr and results in an exit code of 1. In particular, sys.exit("some error message") is a quick way to exit a program when an error occurs.
http://docs.python.org/lib/module-sys.html
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Die meisten nutzen wohl ``sys.exit()`` dem man noch als Parameter einen Rückgabewert mitgeben kann.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
BlackJack

Oder sie benutzen `sys.exit()` weil `exit()` noch relativ neu ist, vor 2.5 war der Name nämlich an eine Zeichenkette gebunden:

Code: Alles auswählen

bj@s8n:~$ python2.5 -c 'exit()'
bj@s8n:~$ python2.4 -c 'exit()'
Traceback (most recent call last):
  File "<string>", line 1, in ?
TypeError: 'str' object is not callable
bj@s8n:~$ python2.4 -c 'print exit'
Use Ctrl-D (i.e. EOF) to exit.
kaschu
User
Beiträge: 25
Registriert: Sonntag 25. Februar 2007, 14:15

nee, nee :wink:
Da wird exit aus dem sys-Modul erläutert. Ich fragte nach der Doku zum exit(), welches eingebaut ist und ohne import sys funktioniert.
kaschu
User
Beiträge: 25
Registriert: Sonntag 25. Februar 2007, 14:15

Leonidas hat geschrieben:Die meisten nutzen wohl ``sys.exit()`` dem man noch als Parameter einen Rückgabewert mitgeben kann.
geht mit der Exception auch:

Code: Alles auswählen

schulz@imac800:~ >python
Python 2.5.1 (r251:54869, Apr 18 2007, 22:08:04) 
[GCC 4.0.1 (Apple Computer, Inc. build 5367)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> raise SystemExit(2)
schulz@imac800:~ >echo $?
2
schulz@imac800:~ >
Es scheint aber nach den unterschiedlichen Meinungen zu urteilen keinen ausdrücklichen Vorzug der einen oder anderen Methode zu geben.
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

kaschu hat geschrieben:
nee, nee :wink:
Da wird exit aus dem sys-Modul erläutert. Ich fragte nach der Doku zum exit(), welches eingebaut ist und ohne import sys funktioniert.
Die Antwort bezog sich mehr auf Frage 2. Daher auch die fette Hervorhebung.
kaschu
User
Beiträge: 25
Registriert: Sonntag 25. Februar 2007, 14:15

snafu hat geschrieben:Die Antwort bezog sich mehr auf Frage 2. Daher auch die fette Hervorhebung.
:idea: ach so meintest Du das! Dann war Dein Beitrag auch ein vote für SystemExit, nicht wahr?! :D
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

kaschu hat geschrieben:Mal zwei Fragen dazu: wo finde ich die eingebaute Funktion exit() dokumentiert? Übersehe ich etwas in http://docs.python.org/lib/built-in-funcs.html?
Nein. exit() und quit() sind genauso wie license, copyright, credits und schließlich help() keine "echten" Builtins. Sie werden erst von site.py in die Builtins gesteckt und sind nur für die Benutzung im interaktiven Interpreter gedacht. Deswegen waren sie ja auch vor 2.5 reine Strings, die dem Benutzer sagten, was sie zum Beenden tun sollen.
Und zweitens: was wäre denn best practice? sys.exit(), exit() oder raise SystemExit. Wobei ich Letzteres intuitiv bevorzugen würde.
Wie wohl jetzt klar ist, ist `exit()` draußen. `sys.exit(code)` wird gegenüber `raise SystemExit(code)`, soweit ich das gesehen habe, deutlich bevorzugt.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
kaschu
User
Beiträge: 25
Registriert: Sonntag 25. Februar 2007, 14:15

birkenfeld hat geschrieben:Wie wohl jetzt klar ist, ist `exit()` draußen. `sys.exit(code)` wird gegenüber `raise SystemExit(code)`, soweit ich das gesehen habe, deutlich bevorzugt.
Ah, danke für die Einschätzung!

Gruß
kaschu
Antworten