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.


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.


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()


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?)


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'

19

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


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 .


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).


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.


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


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)


-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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.