Beenden der Python-Befehlszeile

151

Um die Python-Befehlszeile zu verlassen, muss ich exit () eingeben. Wenn ich exit tippe, heißt es

Use exit() or Ctrl-Z plus Return to exit

Normalerweise exitmöchten Sie beim Tippen das Programm beenden. Warum gibt mir der Interpreter den obigen Fehler, wenn er weiß, dass ich versuche, die Befehlszeile zu verlassen? Warum wird es nicht einfach beendet? Ich weiß, dass es keine Rolle spielt und es ist eine dumme Frage, aber ich bin neugierig.

Ank
quelle
Es könnte damit zu tun haben, wie oft Funktionen ()am Ende aufgerufen werden ... andernfalls könnte es (möglicherweise) eine Variable sein ... oder eine Art Objekt ...
Summea
Richtig, aber der Dolmetscher weiß, dass ich versuche zu beenden, und deshalb druckt er diese Nachricht. Andernfalls hätte es eine Fehlermeldung gedruckt. Wenn es weiß, dass ich versuche zu beenden, kann es einfach beenden.
Ank
1
exit oder exit () gibt für mich einen Fehler aus, etwa 20% der Installationen, die ich auf der Welt gefunden habe ... Nur STRG + Z + Rückgabe funktioniert konsistent.
Paulo Carvalho

Antworten:

36

In meinem Python-Interpreter exitist eigentlich eine Zeichenfolge und keine Funktion - 'Use Ctrl-D (i.e. EOF) to exit.'. Sie können Ihren Dolmetscher durch Eingabe überprüfentype(exit)

In Active Python passiert, dass exit eine Funktion ist. Wenn Sie die Funktion nicht aufrufen, wird die Zeichenfolgendarstellung des Objekts ausgedruckt. Dies ist das Standardverhalten für jedes zurückgegebene Objekt. Es ist nur so, dass die Designer dachten, die Leute könnten versuchen, exit einzugeben, um den Interpreter zu beenden, und so machten sie die Zeichenfolgendarstellung der Exit-Funktion zu einer hilfreichen Nachricht. Sie können dieses Verhalten überprüfen, indem Sie str(exit)oder sogar eingeben print exit.

Dünen
quelle
14
Strg-Z ist das, was Sie unter Windows (also DOS) tun, wo Sie Strg-D auf Unix-ähnlichen Systemen tun würden.
Karl Knechtel
@KarlKnechtel Ah, gut zu wissen. Ich habe wenig Erfahrung mit der Programmierung unter Windows.
Dünen
59

Dies funktioniert für mich, der beste Weg, um aus der Python-Eingabeaufforderung herauszukommen.

Ausfahrt()

Sreedhar GS
quelle
4
Ich bin verwirrt über diese Antwort ... die Frage selbst besagt, dass sie bereits wissen, dass dies exit()funktioniert, und sie möchten wissen, warum exitohne Parens nicht funktioniert. Diese Antwort wiederholt also nur einen Teil der Frage und beantwortet sie nicht wirklich.
Ben Lee
Ich möchte diese Antwort irgendwie ablehnen, weil ich die Frage nicht gelesen habe, aber ich nehme an, dass dies für die meisten Python-Installationen korrekt ist. Es ist nur so, dass der Benutzer sagte, dass dies in seinem Fall nicht funktioniert. Daher scheint es ... unangemessen, es zu empfehlen.
Person27
37

Wenn Sie exitin die Befehlszeile eingeben, wird die Variable mit diesem Namen gefunden und aufgerufen __repr__(oder __str__). Normalerweise erhalten Sie ein Ergebnis wie:

<function exit at 0x00B97FB0>

Sie haben jedoch beschlossen, diese Funktion neu zu definieren, damit das exitObjekt stattdessen eine hilfreiche Nachricht anzeigt. Ob das ein dummes Verhalten ist oder nicht, ist eine subjektive Frage, aber ein möglicher Grund, warum es nicht "einfach beendet" wird, ist:

Angenommen, Sie betrachten beispielsweise Code in einem Debugger und eines der Objekte verweist auf die exitFunktion. Wenn der Debugger versucht, __repr__dieses Objekt aufzurufen , um Ihnen diese Funktion anzuzeigen, wird das Programm plötzlich gestoppt! Das wäre wirklich unerwartet und die Maßnahmen, um dem entgegenzuwirken, könnten die Dinge noch komplizierter machen (zum Beispiel, selbst wenn Sie dieses Verhalten auf die Befehlszeile beschränken, was ist, wenn Sie versuchen, ein Objekt zu drucken, das exitein Attribut hat?)

mgibsonbr
quelle
4
In diesem Fall ist die eigentliche Exit-Funktion nur import sysdann verfügbar, wenn Sie sys.exit () aufrufen, um den Interpreter zu beenden.
Michael Dillon
19

Diese Nachricht ist das __str__Attribut vonexit

schau 'dir diese Beispiele an :

1

>>> print exit
Use exit() or Ctrl-D (i.e. EOF) to exit

2

>>> exit.__str__()
'Use exit() or Ctrl-D (i.e. EOF) to exit'

3

>>> getattr(exit, '__str__')()
'Use exit() or Ctrl-D (i.e. EOF) to exit'
moul
quelle
19

Ich empfehle Ihnen, den Python-Interpreter mit zu beenden Ctrl-D. Dies ist der alte ASCII-Code für das Ende der Datei oder das Ende der Übertragung.

Jay Slupesky
quelle
Diese Methode funktioniert anscheinend nicht, wenn im Skript ein Fehler aufgetreten ist.
Blaylockbk
2
Ctrl-Breakfunktioniert konsistent in Windows. Ctrl-Doder Ctrl-Zarbeitete in Windows für Python 2.7, 3.4, 3.6. In Python 3.7 funktionierten diese jedoch nicht mehr und die kürzeste ASCII-Sequenz, die beendet wird, ist Ctrl-Z Enter.
Bob Stein
14

Mit Anaconda 4.5+ und Python 3.6+ unter Windows verwenden

Ctrl+Z

oder

exit()

In einigen Fällen müssen Sie möglicherweise verwenden

Ctrl+Break

Wenn Ihr Computer keinen BreakSchlüssel hat, sehen Sie hier .

Shital Shah
quelle
8

Da der Interpreter keine Shell ist, in der Sie Befehle bereitstellen, handelt es sich um einen Interpreter. Die Dinge, die Sie ihm geben, sind Python-Code.

Die Syntax von Python ist so, dass exitan sich unmöglich etwas anderes als ein Name für ein Objekt sein kann. Das einfache Verweisen auf ein Objekt kann eigentlich nichts bewirken (außer dem, was die Lese-Auswertungs-Druckschleife normalerweise tut, dh eine Zeichenfolgendarstellung des Objekts anzeigen).

Karl Knechtel
quelle
6

Sie können das beheben.

Verknüpfen Sie PYTHONSTARTUPeine Python-Datei mit den folgenden Angaben

# Make exit work as expected
type(exit).__repr__ = type(exit).__call__

Wie funktioniert das?

Die Python-Befehlszeile ist eine Lese-Auswertungs-Druckschleife. Wenn Sie also Text eingeben, wird dieser Text gelesen, ausgewertet und schließlich das Ergebnis gedruckt.

Wenn Sie eingeben, wird exit()es zu einem aufrufbaren Objekt vom Typ ausgewertet site.Quitterund ruft seine __call__Funktion auf, die das System verlässt. Wenn Sie exiteingeben, wird das gleiche aufrufbare Objekt ausgewertet, ohne es aufzurufen, wird das Objekt gedruckt, das wiederum __repr__das Objekt aufruft .

Wir können dies nutzen , durch die Verknüpfung __repr__zu __call__und erhalten somit das erwartete Verhalten Verlassen des Systems , auch wenn wir geben exitohne Klammern.

akuhn
quelle
4
Sie haben sich die Mühe gemacht, exitden "hilfreichen" String zu drucken, aber sie konnten ihn nicht einfach binden, um das Natürliche zu tun und den Interpreter zu verlassen. Es ist frustrierend, jedes Mal gezwungen zu sein, die Klammern einzugeben. Diese Antwort ist perfekt und sollte stattdessen akzeptiert werden.
Przemek D
3

Um das Python-Terminal zu verlassen , gehen Sie einfach wie folgt vor:

exit()

Bitte beachten Sie, dass es sich um eine Funktion handelt, die aufgerufen wird, da die meisten Benutzer sie mit exit mischen, ohne aufzurufen, aber das neue Pyhton-Terminal eine Meldung anzeigt ...

oder drücken Sie als Verknüpfung:

Ctrl + D

auf Ihrer Tastatur ...

Strg + D.

Alireza
quelle
1
Alles, was Sie gesagt haben, wurde bereits in den obigen Antworten behandelt.
Przemek D
0

Wenn Sie in der Python-Befehlszeile stecken geblieben sind und keine der oben genannten Lösungen für Sie funktioniert hat, versuchen Sie es exit(2)

Mahdi Baghbani
quelle
-1

"exit" ist ein gültiger Variablenname, der in Ihrem Python-Programm verwendet werden kann. Sie möchten den Interpreter nicht verlassen, wenn Sie nur versuchen, den Wert dieser Variablen anzuzeigen.

Chad Kennedy
quelle
Außer wenn Sie zuweisen exit, überschreiben Sie dieses Symbol und exit()funktionieren nicht mehr. Obwohl dieses Symbol ein gültiger Variablenname ist, scheint die Verwendung auf diese Weise keine sehr gute Vorgehensweise zu sein.
Przemek D