Wychodzenie z wiersza poleceń Pythona

152

Aby wyjść z wiersza poleceń Pythona, muszę wpisać exit (). Jeśli napiszę exit, to mówi

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

Zwykle podczas pisania exitchciałbyś wyjść z programu. Dlaczego interpreter wyświetla powyższy błąd, skoro wie, że próbuję wyjść z wiersza poleceń? Dlaczego po prostu nie wychodzi? Wiem, że to nie ma znaczenia i to głupie pytanie, ale jestem ciekawy.

Ank
źródło
Może to mieć związek z tym, jak często wywoływane są funkcje ()na końcu ... w przeciwnym razie może to być (prawdopodobnie) zmienna ... lub jakiś obiekt ...
summea
racja, ale tłumacz wie, że próbuję wyjść i dlatego wyświetla tę wiadomość. w przeciwnym razie wypisałby komunikat o błędzie. Jeśli wie, że próbuję wyjść, może po prostu wyjść.
Ank
1
exit lub exit () wyrzuca mi błąd około 20% instalacji, które znalazłem na świecie ... Tylko CTRL + Z + powrót konsekwentnie działa.
Paulo Carvalho

Odpowiedzi:

37

W moim interpreter Pythona exitjest w rzeczywistości ciągiem znaków, a nie funkcją - 'Use Ctrl-D (i.e. EOF) to exit.'. Możesz sprawdzić swojego tłumacza, wchodząctype(exit)

W aktywnym Pythonie dzieje się tak, że wyjście jest funkcją. Jeśli nie wywołasz funkcji, wydrukuje ona ciąg znaków reprezentujący obiekt. Jest to domyślne zachowanie dla każdego zwróconego obiektu. Po prostu projektanci myśleli, że ludzie mogą próbować wpisać exit, aby wyjść z interpretera, więc uczynili użyteczną wiadomość z reprezentacji ciągu znaków funkcji exit. Możesz sprawdzić to zachowanie, wpisując str(exit)lub nawet print exit.

Wydmy
źródło
14
Ctrl-Z jest tym, co robisz w systemie Windows (cóż, DOS), gdzie zrobiłbyś Ctrl-D w systemach uniksopodobnych.
Karl Knechtel
@KarlKnechtel Ah, dobrze wiedzieć. Mam niewielkie doświadczenie w programowaniu w systemie Windows.
Wydmy
60

To działa dla mnie, najlepszy sposób na wyjście z podpowiedzi Pythona.

wyjście()

Sreedhar GS
źródło
4
Jestem zdezorientowany tą odpowiedzią ... samo pytanie mówi, że już wiedzą, że exit()działa, i chcą wiedzieć, dlaczego exitbez parens nie działa. Więc ta odpowiedź po prostu powtarza część pytania i tak naprawdę na nie nie odpowiada.
Ben Lee,
Chciałbym w pewnym sensie odrzucić tę odpowiedź, ponieważ nie czytałem pytania, ale przypuszczam, że w przypadku większości instalacji Pythona jest to poprawne; po prostu użytkownik powiedział, że to nie działa w jego przypadku, więc rekomendowanie tego wydaje się ... niewłaściwe.
osoba 27
37

Kiedy wpisujesz exitw linii poleceń, znajduje zmienną o tej nazwie i wywołuje __repr__(lub __str__) na niej. Zwykle otrzymujesz wynik taki jak:

<function exit at 0x00B97FB0>

Postanowili jednak przedefiniować tę funkcję, aby exitobiekt wyświetlał pomocny komunikat. To, czy jest to głupie zachowanie, czy nie, jest subiektywną kwestią, ale jednym z możliwych powodów, dla których nie „po prostu się kończy”, jest:

Załóżmy, że na przykład patrzysz na kod w debugerze, a jeden z obiektów odwołuje się do exitfunkcji. Kiedy debugger próbuje wywołać __repr__ten obiekt, aby wyświetlić tę funkcję, program nagle się zatrzymuje! Byłoby to naprawdę nieoczekiwane, a środki, które należy przeciwdziałać, mogłyby jeszcze bardziej skomplikować sytuację (na przykład, nawet jeśli ograniczysz to zachowanie do wiersza poleceń, co jeśli spróbujesz wydrukować obiekt, który ma exitjako atrybut?)

mgibsonbr
źródło
4
W tym przypadku prawdziwa funkcja wyjścia nie jest nawet w zasięgu, chyba że ty import sys, po czym wywołałbyś sys.exit (), aby wyjść z interpretera.
Michael Dillon
19

Ta wiadomość jest __str__atrybutemexit

Spójrz na te przykłady :

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
źródło
19

Zalecam wyjście z interpretera Pythona za pomocą Ctrl-D. To jest stary kod ASCII dla końca pliku lub końca transmisji.

Jay Slupesky
źródło
Wygląda na to, że ta metoda nie działa, jeśli skrypt napotkał błąd.
blaylockbk
2
Ctrl-Breakdziała konsekwentnie w systemie Windows. Ctrl-Dlub Ctrl-Zpracował w systemie Windows dla Python 2.7, 3.4, 3.6. Ale w Pythonie 3.7 przestały one działać, a najkrótsza kończy się sekwencja ASCII Ctrl-Z Enter.
Bob Stein
14

Z Anaconda 4.5+ i Python 3.6+ w systemie Windows używaj

Ctrl+Z

lub

exit()

W niektórych przypadkach może być konieczne użycie

Ctrl+Break

Jeśli twój komputer nie ma Breakklucza, zobacz tutaj .

Shital Shah
źródło
8

Ponieważ interpreter nie jest powłoką, w której podajesz polecenia, jest - cóż - tłumaczem. To, co mu dajesz, to kod Pythona.

Składnia Pythona jest taka, że exitsama w sobie nie może być niczym innym niż nazwą obiektu. Zwykłe odwołanie się do obiektu nie może w rzeczywistości nic zrobić (poza tym, co normalnie robi pętla read-eval-print; tj. Wyświetla ciąg znaków reprezentujący obiekt).

Karl Knechtel
źródło
6

Możesz to naprawić.

Link PYTHONSTARTUPdo pliku Pythona z następującym

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

Jak to działa?

Wiersz poleceń Pythona jest pętlą odczytu-oceny-wydruku, to znaczy, kiedy wpiszesz tekst, odczyta on ten tekst, oceni go i ostatecznie wydrukuje wynik.

Kiedy wpisujesz, exit()zwraca on wynik do wywoływalnego obiektu typu site.Quitteri wywołuje swoją __call__funkcję, która zamyka system. Kiedy wpiszesz, exitzwraca się do tego samego wywoływalnego obiektu, bez wywoływania go drukowany jest obiekt, który z kolei wywołuje __repr__obiekt.

Możemy to wykorzystać, łącząc __repr__się __call__i uzyskując oczekiwane zachowanie wychodzenia z systemu, nawet gdy wpisujemy exitbez nawiasów.

akuhn
źródło
4
Podjęli wysiłek, aby exitwydrukować „pomocny” ciąg, ale nie mogli go po prostu powiązać, aby zrobić naturalną rzecz i wyjść z interpretera. Bycie zmuszonym do wpisywania nawiasów za każdym razem jest frustrujące. Ta odpowiedź jest doskonała i zamiast tego powinna być akceptowana.
Przemek D
3

Aby wyjść z terminala Python , po prostu wykonaj:

exit()

Proszę zwrócić uwagę, że jest to funkcja, która jak większość użytkowników łączyła ją z wyjściem bez wywoływania, ale nowy terminal Pyhton wyświetla komunikat ...

lub jako skrót naciśnij:

Ctrl + D

na klawiaturze ...

ctrl + D

Alireza
źródło
1
Wszystko, co powiedziałeś, zostało już uwzględnione w odpowiedziach powyżej.
Przemek D
0

Jeśli utknąłeś w linii poleceń Pythona i żadne z powyższych rozwiązań nie zadziałało, spróbuj exit(2)

Mahdi Baghbani
źródło
-1

„exit” to poprawna nazwa zmiennej, której można używać w programie w języku Python. Nie chciałbyś wychodzić z interpretera, gdy tylko próbujesz zobaczyć wartość tej zmiennej.

Chad Kennedy
źródło
Z wyjątkiem przypadku, gdy przypiszesz do exit, zastąpisz ten symbol i exit()przestaniesz działać. Chociaż ten symbol jest prawidłową nazwą zmiennej, używanie go w taki sposób nie wydaje się być bardzo dobrą praktyką.
Przemek D