Seite 1 von 1

Programm beenden (geloest)

Verfasst: Mittwoch 3. September 2008, 10:16
von Flo668
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!

Verfasst: Mittwoch 3. September 2008, 10:20
von kaschu
suchst Du sys.exit(...)?

Verfasst: Mittwoch 3. September 2008, 10:38
von Flo668
Ja, suchte ich. Danke

Verfasst: Mittwoch 3. September 2008, 15:44
von cofi
kaschu hat geschrieben:suchst Du sys.exit(...)?
Ist sogar ein BuiltIn ;) -> `exit()'

Verfasst: Freitag 5. September 2008, 14:59
von Fabian Kochem
Oder, der Vollständigkeit halber:

raise SystemExit

Verfasst: Samstag 6. September 2008, 07:32
von kaschu
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

Verfasst: Samstag 6. September 2008, 08:48
von snafu
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

Verfasst: Samstag 6. September 2008, 09:18
von Leonidas
Die meisten nutzen wohl ``sys.exit()`` dem man noch als Parameter einen Rückgabewert mitgeben kann.

Verfasst: Samstag 6. September 2008, 09:44
von 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.

Verfasst: Samstag 6. September 2008, 10:48
von kaschu
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.

Verfasst: Samstag 6. September 2008, 10:50
von kaschu
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.

Verfasst: Samstag 6. September 2008, 10:59
von snafu
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.

Verfasst: Samstag 6. September 2008, 11:49
von kaschu
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

Verfasst: Dienstag 9. September 2008, 15:41
von birkenfeld
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.

Verfasst: Dienstag 9. September 2008, 16:19
von kaschu
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