Saliendo de la línea de comandos de Python

152

Para salir de la línea de comando de Python, tengo que escribir exit (). Si escribo exit, dice

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

Por lo general, cuando escribe exit, desea salir del programa. ¿Por qué el intérprete me da el error anterior cuando sabe que estoy tratando de salir de la línea de comando? ¿Por qué no acaba de salir? Sé que no importa y es una pregunta tonta, pero tengo curiosidad.

Ank
fuente
Es posible que tenga que ver con cómo a menudo se llaman las funciones ()al final ... de lo contrario, podría (posiblemente) ser una variable ... o algún tipo de objeto ...
summea
bien, pero el intérprete sabe que estoy tratando de salir y por eso imprime ese mensaje. de lo contrario, habría impreso un mensaje de error. Si sabe que estoy tratando de salir, simplemente puede salir.
Ank
1
exit or exit () arroja un error para mí sobre el 20% de las instalaciones que he encontrado en el mundo ... Solo CTRL + Z + return funciona de manera consistente.
Paulo Carvalho

Respuestas:

37

En mi intérprete de Python exites en realidad una cadena y no una función - 'Use Ctrl-D (i.e. EOF) to exit.'. Puede consultar a su intérprete ingresandotype(exit)

En Python activo, lo que sucede es que la salida es una función. Si no llama a la función, imprimirá la representación de cadena del objeto. Este es el comportamiento predeterminado para cualquier objeto devuelto. Es solo que los diseñadores pensaron que las personas podrían tratar de escribir exit para salir del intérprete, por lo que hicieron que la representación de cadena de la función de salida sea un mensaje útil. Puede verificar este comportamiento escribiendo str(exit)o incluso print exit.

Dunas
fuente
14
Ctrl-Z es lo que haces en Windows (bueno, DOS) donde harías Ctrl-D en sistemas tipo Unix.
Karl Knechtel
@KarlKnechtel Ah, es bueno saberlo. Tengo poca experiencia de programación en Windows.
Dunes
60

Esto funciona para mí, la mejor manera de salir de Python prompt.

salida()

Sreedhar GS
fuente
44
Estoy confundido acerca de esta respuesta ... la pregunta en sí misma dice que ya saben que exit()funciona, y quieren saber por qué exitsin parens no funciona. Entonces, esta respuesta solo repite parte de la pregunta y en realidad no la responde.
Ben Lee
Me gustaría rechazar esta respuesta por no leer la pregunta, pero supongo que para la mayoría de las instalaciones de Python esto es correcto; es solo que el usuario dijo que esto no funciona en su caso, por lo que recomendarlo parece ... incorrecto.
persona27
37

Cuando escribe exiten la línea de comando, encuentra la variable con ese nombre y llama __repr__(o __str__) en ella. Por lo general, obtendría un resultado como:

<function exit at 0x00B97FB0>

Pero decidieron redefinir esa función para que el exitobjeto muestre un mensaje útil. Si ese es un comportamiento estúpido o no, es una pregunta subjetiva, pero una posible razón por la que no "simplemente sale" es:

Supongamos que está viendo algún código en un depurador, por ejemplo, y uno de los objetos hace referencia a la exitfunción. Cuando el depurador intenta invocar __repr__ese objeto para mostrarle esa función, ¡el programa se detiene de repente! Eso sería realmente inesperado, y las medidas para contrarrestar eso podrían complicar aún más las cosas (por ejemplo, incluso si limita ese comportamiento a la línea de comando, ¿qué pasa si intenta imprimir algún objeto que tiene exitcomo atributo?)

mgibsonbr
fuente
44
En este caso, la función de salida real ni siquiera está dentro del alcance a menos que usted import sys, después de lo cual llamaría a sys.exit () para salir del intérprete.
Michael Dillon
19

Este mensaje es el __str__atributo deexit

mira estos ejemplos:

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
fuente
19

Te recomiendo que salgas del intérprete de Python con Ctrl-D. Este es el antiguo código ASCII para fin de archivo o fin de transmisión.

Jay Slupesky
fuente
Parece que este método no funciona si el script se encuentra con un error.
blaylockbk
2
Ctrl-BreakFunciona constantemente en Windows. Ctrl-Do Ctrl-Ztrabajó en Windows para Python 2.7, 3.4, 3.6. Pero en Python 3.7 estos dejaron de funcionar, y la secuencia ASCII más corta que sale es Ctrl-Z Enter.
Bob Stein
14

Con Anaconda 4.5+ y Python 3.6+ en el uso de Windows

Ctrl+Z

o

exit()

En algunos casos, es posible que deba usar

Ctrl+Break

Si su computadora no tiene Breakclave, vea aquí .

Shital Shah
fuente
8

Debido a que el intérprete no es un shell donde proporciona comandos, es, bueno, un intérprete. Las cosas que le das son código Python.

La sintaxis de Python es tal que exit, por sí sola, no puede ser otra cosa que un nombre para un objeto. Simplemente referirse a un objeto en realidad no puede hacer nada (excepto lo que normalmente hace el ciclo read-eval-print; es decir, mostrar una representación de cadena del objeto).

Karl Knechtel
fuente
6

Puedes arreglar eso.

Enlace PYTHONSTARTUPa un archivo de Python con lo siguiente

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

¿Como funciona esto?

La línea de comando de Python es un ciclo de lectura-evaluación-impresión, es decir, cuando escribe texto, leerá ese texto, lo evaluará y finalmente imprimirá el resultado.

Cuando escribe, exit()se evalúa como un objeto de tipo invocable site.Quittery llama a su __call__función que sale del sistema. Cuando escribe, exitse evalúa como el mismo objeto invocable, sin llamarlo, se imprime el objeto, que a su vez llama __repr__al objeto.

Podemos tomar ventaja de esta mediante la vinculación __repr__a __call__y así conseguir el comportamiento esperado de la salida del sistema, incluso cuando escribimos exitsin paréntesis.

akuhn
fuente
44
Se esforzaron por exitimprimir la cadena "útil", pero no pudieron vincularla para hacer lo natural y salir del intérprete. Ser forzado a escribir los paréntesis cada vez es frustrante. Esta respuesta es perfecta y debería ser la aceptada en su lugar.
Przemek D
3

Para salir de la terminal de Python , simplemente haga:

exit()

Por favor, preste atención, es una función que se llama porque la mayoría de los usuarios la mezclan con exit sin llamar, pero la nueva terminal Pyhton muestra un mensaje ...

o como acceso directo, presione:

Ctrl + D

en tu teclado ...

Ctrl + D

Alireza
fuente
1
Todo lo que dijo ya se ha cubierto en las respuestas anteriores.
Przemek D
0

Si se atascó en la línea de comando de Python y ninguna de las soluciones anteriores funcionó para usted, intente exit(2)

Mahdi Baghbani
fuente
-1

"exit" es un nombre de variable válido que puede usarse en su programa Python. No querrá salir del intérprete cuando solo está tratando de ver el valor de esa variable.

Chad Kennedy
fuente
Excepto si asigna a exit, anulará este símbolo y exit()ya no funcionará. Aunque este símbolo es un nombre de variable válido, usarlo de esa manera no parece ser una muy buena práctica.
Przemek D