Saindo da linha de comando python


152

Para sair da linha de comando do Python, tenho que digitar exit (). Se eu digitar exit, ele diz

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

Geralmente, ao digitar exit, você deseja sair do programa. Por que o intérprete me deu o erro acima quando sabe que estou tentando sair da linha de comando? Por que simplesmente não sai? Eu sei que isso não importa e é uma pergunta boba, mas estou curioso.


Ele pode ter a ver com a forma como as funções são freqüentemente chamados com ()no final ... caso contrário, ele pode (eventualmente) ser uma variável ... ou algum tipo de objeto ...
summea

certo, mas o intérprete sabe que estou tentando sair e é por isso que imprime essa mensagem. caso contrário, teria impresso uma mensagem de erro. Se ele sabe que estou tentando sair, ele pode simplesmente sair.
Ank

1
exit ou exit () gera um erro para mim em cerca de 20% das instalações que encontrei no mundo ... Somente o retorno CTRL + Z + funciona consistentemente.
Paulo Carvalho

Respostas:


37

No meu intérprete python exité realmente uma string e não uma função - 'Use Ctrl-D (i.e. EOF) to exit.'. Você pode verificar seu intérprete digitandotype(exit)

No python ativo, o que está acontecendo é que a saída é uma função. Se você não chamar a função, ela imprimirá a representação em seqüência do objeto. Este é o comportamento padrão para qualquer objeto retornado. Só que os designers pensaram que as pessoas poderiam tentar digitar exit para sair do intérprete, de modo que tornaram a representação em string da função de saída uma mensagem útil. Você pode verificar esse comportamento digitando str(exit)ou mesmo print exit.


14
Ctrl-Z é o que você faz no Windows (bem, DOS), onde você faria o Ctrl-D em sistemas como o Unix.
precisa

@KarlKnechtel Ah, bom saber. Eu tenho pouca experiência de programação no Windows.
Dunes

60

Isso funciona para mim, a melhor maneira de sair do prompt do python.

Saída()


4
Estou confuso com esta resposta ... a própria pergunta diz que eles já sabem o que exit()funciona, e querem saber por que, exitsem parênteses, não funciona. Portanto, essa resposta apenas repete parte da pergunta e na verdade não responde.
Ben Lee

Eu meio que quero diminuir o voto desta resposta por não ter lido a pergunta, mas suponho que para a maioria das instalações python isso esteja correto; é só que o usuário disse que isso não funciona no caso deles, então recomendamos que pareça ... impróprio.
person27

37

Quando você digita exitna linha de comando, ela encontra a variável com esse nome e chama __repr__(ou __str__) nela. Geralmente, você obtém um resultado como:

<function exit at 0x00B97FB0>

Mas eles decidiram redefinir essa função para que o exitobjeto exibisse uma mensagem útil. Se esse é um comportamento estúpido ou não, é uma questão subjetiva, mas uma possível razão pela qual ele "simplesmente não sai" é:

Suponha que você esteja visualizando algum código em um depurador, por exemplo, e um dos objetos faça referência à exitfunção. Quando o depurador tenta chamar __repr__esse objeto para exibir essa função para você, o programa para de repente! Isso seria realmente inesperado, e as medidas para combater isso podem complicar ainda mais as coisas (por exemplo, mesmo se você limitar esse comportamento à linha de comando, e se tentar imprimir algum objeto que tenha exitcomo atributo?)


4
Nesse caso, a função de saída real não está no escopo, a menos que você import sys, após o qual você chamaria sys.exit () para sair do intérprete.
Michael Dillon

19

Esta mensagem é o __str__atributo deexit

veja estes exemplos:

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

Eu recomendo que você saia do interpretador Python com Ctrl-D. Este é o código ASCII antigo para final de arquivo ou final de transmissão.


Parece que esse método não funciona se o script tiver um erro.
precisa

2
Ctrl-Breakfunciona de forma consistente no Windows. Ctrl-Dou Ctrl-Ztrabalhou no Windows para Python 2.7, 3.4, 3.6. Porém, no Python 3.7, eles pararam de funcionar e a menor sequência ASCII que existe é Ctrl-Z Enter.
Bob Stein

14

Com o Anaconda 4.5+ e o Python 3.6+ no Windows, use

Ctrl+Z

ou

exit()

Em alguns casos, você pode precisar usar

Ctrl+Break

Se o seu computador não tiver Breakchave, veja aqui .


8

Como o intérprete não é um shell em que você fornece comandos, é - bem - um intérprete. O que você dá a ele é código Python.

A sintaxe do Python é tal que exit, por si só, não pode ser outra coisa senão o nome de um objeto. Simplesmente referir-se a um objeto não pode realmente fazer nada (exceto o que o loop read-eval-print normalmente faz; por exemplo, exibir uma representação de string do objeto).


6

Você pode consertar isso.

Vincule PYTHONSTARTUPa um arquivo python com o seguinte

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

Como é que isso funciona?

A linha de comando python é um loop de leitura-avaliação-impressão, ou seja, quando você digita texto, ele lê, avalia e, eventualmente, imprime o resultado.

Quando você digita, exit()ele é avaliado para um objeto que pode ser site.Quitterchamado do tipo e chama sua __call__função que sai do sistema. Quando você digita, exitele avalia o mesmo objeto que pode ser chamado, sem chamá-lo, o objeto é impresso, o que, por sua vez, chama __repr__o objeto.

Podemos tirar proveito deste ligando __repr__para __call__e, assim, obter o comportamento esperado de sair do sistema, mesmo quando nós digitamos exitsem parênteses.


4
Eles se esforçaram para exitimprimir a sequência "útil", mas não podiam simplesmente vinculá-la para fazer a coisa natural e sair do intérprete. Ser forçado a digitar os parênteses toda vez é frustrante. Esta resposta é perfeita e deve ser a aceita.
Przemek D

3

Para sair do terminal Python , basta fazer o seguinte:

exit()

Por favor, preste atenção: é uma função chamada como a maioria dos usuários a mistura com a saída sem chamar, mas o novo terminal Pyhton mostra uma mensagem ...

ou como atalho, pressione:

Ctrl + D

no seu teclado ...

ctrl + D


1
Tudo o que você disse já foi abordado nas respostas acima.
Przemek D

0

Se você travou na linha de comando python e nenhuma das soluções acima funcionou para você, tente exit(2)


-1

"exit" é um nome de variável válido que pode ser usado no seu programa Python. Você não gostaria de sair do intérprete quando estiver apenas tentando ver o valor dessa variável.


Exceto se você atribuir a exit, você substitui este símbolo e exit()não funcionará mais. Embora esse símbolo seja um nome de variável válido, usá-lo dessa maneira não parece ser uma prática muito boa.
Przemek D
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.