Uscita dalla riga di comando di Python


152

Per uscire dalla riga di comando di Python, devo digitare exit (). Se scrivo exit, dice

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

Di solito quando si digita exit, si vorrebbe uscire dal programma. Perché l'interprete mi dà l'errore sopra quando sa che sto cercando di uscire dalla riga di comando? Perché non esce? So che non importa ed è una domanda sciocca ma sono curioso.


Potrebbe avere a che fare con il modo in cui le funzioni vengono spesso chiamate ()alla fine ... altrimenti, potrebbe (probabilmente) essere una variabile ... o una sorta di oggetto ...
summea

giusto, ma l'interprete sa che sto cercando di uscire ed è per questo che stampa quel messaggio. altrimenti avrebbe stampato un messaggio di errore. Se sa che sto cercando di uscire, può semplicemente uscire.
Ank

1
exit o exit () genera un errore per me circa il 20% delle installazioni che ho trovato nel mondo ... Funziona costantemente solo CTRL + Z + return.
Paulo Carvalho,

Risposte:


37

Nel mio interprete Python exitè in realtà una stringa e non una funzione - 'Use Ctrl-D (i.e. EOF) to exit.'. Puoi controllare il tuo interprete inserendotype(exit)

In python attivo ciò che sta accadendo è che exit è una funzione. Se non si chiama la funzione, verrà stampata la rappresentazione in formato stringa dell'oggetto. Questo è il comportamento predefinito per qualsiasi oggetto restituito. È solo che i progettisti hanno pensato che le persone potessero provare a digitare exit per uscire dall'interprete, quindi hanno reso utile la rappresentazione in formato stringa della funzione exit. È possibile verificare questo comportamento digitando str(exit)o anche print exit.


14
Ctrl-Z è quello che fai su Windows (bene, DOS) dove faresti Ctrl-D su sistemi simili a Unix.
Karl Knechtel,

@KarlKnechtel Ah, buono a sapersi. Ho poca esperienza di programmazione su Windows.
Dunes

60

Questo funziona per me, il modo migliore per uscire dal prompt di Python.

Uscita()


4
Sono confuso riguardo a questa risposta ... la domanda stessa dice che già sanno che exit()funziona e vogliono sapere perché exitsenza i genitori non funziona. Quindi questa risposta ripete solo parte della domanda e in realtà non risponde.
Ben Lee,

In un certo senso voglio sottovalutare questa risposta per non aver letto la domanda, ma suppongo che per la maggior parte delle installazioni di Python sia corretto; è solo che l'utente ha detto che non funziona nel suo caso, quindi raccomandarlo sembra ... improprio.
persona27

37

Quando si digita exitnella riga di comando, trova la variabile con quel nome e chiama __repr__(o __str__) su di essa. Di solito, otterrai un risultato come:

<function exit at 0x00B97FB0>

Ma hanno deciso di ridefinire quella funzione affinché l' exitoggetto visualizzi invece un messaggio utile. Che si tratti o meno di un comportamento stupido o meno, è una domanda soggettiva, ma una possibile ragione per cui non "esce" è:

Supponiamo che tu stia guardando un po 'di codice in un debugger, per esempio, e che uno degli oggetti faccia riferimento alla exitfunzione. Quando il debugger cerca di richiamare __repr__quell'oggetto per mostrarti quella funzione, il programma si interrompe improvvisamente! Sarebbe davvero inaspettato e le misure per contrastare che potrebbero complicare ulteriormente le cose (ad esempio, anche se si limita tale comportamento alla riga di comando, cosa succede se si tenta di stampare un oggetto che ha exitcome attributo?)


4
In questo caso, la vera funzione di uscita non è nemmeno nell'ambito a meno che tu import sys, dopo di che chiameresti sys.exit () per uscire dall'interprete.
Michael Dillon,

19

Questo messaggio è l' __str__attributo diexit

guarda questi esempi:

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

Ti consiglio di uscire dall'interprete Python con Ctrl-D. Questo è il vecchio codice ASCII per la fine del file o la fine della trasmissione.


Sembra che questo metodo non funzioni se lo script ha riscontrato un errore.
blaylockbk,

2
Ctrl-Breakfunziona costantemente in Windows. Ctrl-Do ha Ctrl-Zfunzionato in Windows per Python 2.7, 3.4, 3.6. Ma in Python 3.7 questi hanno smesso di funzionare e la sequenza ASCII più corta che esce è Ctrl-Z Enter.
Bob Stein,

14

Con Anaconda 4.5+ e Python 3.6+ su Windows

Ctrl+Z

o

exit()

In alcuni casi, potrebbe essere necessario utilizzare

Ctrl+Break

Se il tuo computer non ha la Breakchiave, vedi qui .


8

Poiché l'interprete non è una shell in cui si forniscono comandi, è - beh - un interprete. Le cose che gli dai sono il codice Python.

La sintassi di Python è tale che exit, di per sé, non può essere altro che un nome per un oggetto. Il semplice riferimento a un oggetto non può effettivamente fare nulla (tranne ciò che fa normalmente il ciclo read-eval-print; cioè visualizzare una rappresentazione in forma di stringa dell'oggetto).


6

Puoi sistemarlo.

Collegamento PYTHONSTARTUPa un file Python con il seguente

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

Come funziona?

La riga di comando di Python è un ciclo di lettura-valutazione-stampa, ovvero quando si digita testo, leggerà quel testo, lo valuterà e infine stamperà il risultato.

Quando si digita exit(), restituisce un oggetto di tipo chiamabile site.Quittere chiama la sua __call__funzione che esce dal sistema. Quando lo digiti exit, restituisce lo stesso oggetto richiamabile, senza chiamarlo viene stampato l'oggetto che a sua volta richiama __repr__l'oggetto.

Siamo in grado di trarre vantaggio da questo collegando __repr__a __call__, e quindi ottenere il comportamento previsto di uscire dal sistema anche quando digitiamo exitsenza parentesi.


4
Hanno fatto lo sforzo di rendere la exitstampa la stringa "utile", ma non potevano semplicemente vincolarla per fare la cosa naturale e uscire dall'interprete. Essere costretti a digitare le parentesi ogni volta è frustrante. Questa risposta è perfetta e dovrebbe essere invece accettata.
Przemek D,

3

Per uscire dal terminale Python , basta semplicemente fare:

exit()

Si prega di prestare attenzione che è una funzione che ha chiamato poiché la maggior parte degli utenti lo mescola con exit senza chiamare, ma il nuovo terminale Pyhton mostra un messaggio ...

o come scorciatoia, premere:

Ctrl + D

sulla tua tastiera ...

ctrl + D


1
Tutto ciò che hai detto è già stato trattato nelle risposte sopra.
Przemek D,

0

Se sei bloccato nella riga di comando di Python e nessuna delle soluzioni precedenti ha funzionato per te, prova exit(2)


-1

"exit" è un nome di variabile valido che può essere utilizzato nel programma Python. Non vorrai uscire dall'interprete quando stai solo cercando di vedere il valore di quella variabile.


Tranne se assegnato a exit, si ignora questo simbolo e exit()non funzionerà più. Sebbene questo simbolo sia un nome di variabile valido, usarlo in questo modo non sembra essere una buona pratica.
Przemek D,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.