Comandos para sair de um script Python: exit(), quit(), sys.exit(), os_exit()
Comandos para sair de um script Python: exit(), quit(), sys.exit()
Como sair de um programa em Python? Neste artigo vou abordar de forma sucinta alguns comandos que podem ser empregados para encerrar (fechar) um programa escrito na linguagem Python.
As funções que estudaremos são:
- Função exit()
- Função quit()
- Função sys.exit()
- Função os.exit()
Além de entender como funciona a exceção SystemExit e as diferenças entre as funções citadas.
Comando exit() no Python
Trata-se de uma função interna da linguagem, que permite sair do programa em execução. Recomenda-se usá-la apenas no interpretador, para testes dos script em desenvolvimento.
Exemplo:
lista = ['Azul', 'Vermelho', 'Amarelo', 'Verde', 'Cinza', 'Marrom'] for cor in lista: if cor == 'Amarelo': print('Saindo...') exit() print(cor)
Ao executar o código acima no IDLE a aplicação é interrompida ao encontrar a instrução exit(), e a caixa de diálogo a seguir será exibida, perguntando se você deseja encerrar a aplicação:
Clique em qualquer dos botões para encerrar o script em definitivo.
Observação: Se você tentar rodar o script acima com a função exit() em um notebook Jupyter, o kernel será encerrado (e reiniciado). Prefira testar o código em um IDE como o IDLE ou o PyCharm.
Função quit()
Trata-se de uma função interna do Python, que encerra um programa ao ser executada.
Assim como no caso da função exit(), não se recomenda usar a função quit() em scripts reais, somente em testes no interpretador – mesmo porque correspondem à mesma função.
Exemplo:
lista = ['Azul', 'Vermelho', 'Amarelo', 'Verde', 'Cinza', 'Marrom'] for cor in lista: if cor == 'Amarelo': print('Saindo com quit()...') quit() print(cor)
Ao executar o código acima no IDLE a aplicação é interrompida ao encontrar a instrução quit(), e a caixa de diálogo a seguir será exibida, perguntando se você deseja encerrar a aplicação:
Clique em qualquer dos botões para encerrar o script em definitivo.
Observação: as funções exit() e quit() não devem ser usadas em ambientes de produção, pois usam o módulo site, que não necessariamente estará instalado em qualquer sistema.
Observação #2: Se você tentar rodar o script acima com a função quit() em um notebook Jupyter, o kernel será encerrado (e reiniciado). Prefira testar o código em um IDE como o IDLE ou o PyCharm.
Esses comandos são na verdade auxiliares para uso no interpretador interativo, e não devem ser empregados em programas, de acordo com a documentação oficial do Python: https://docs.python.org/2/library/constants.html#exit
Função sys.exit()
Trata-se da função exit() pertencente ao módulo sys, que sempre está disponível para os programas em Python (desde que importado). Essa função encerra o programa em execução, além de lançar a exceção SystemExit.
Exemplo:
import sys lista = ['Azul', 'Vermelho', 'Verde', 'Amarelo', 'Cinza', 'Marrom'] for cor in lista: if cor == 'Amarelo': break print(cor) #sys.exit('Saindo') # Sai direto, mostrando a mensagem ao lançar a exceção # Capturar e tratar exceção e sair try: sys.exit() except SystemExit: print('Programa finalizado com a exceção SystemExit')
Note que o próprio comando sys.exit() permite emitir uma mensagem de saída ao encerrar um programa (opcional).
sys.exit aceita um argumento, seu status, e é opcional. Podemos passar uma string de mensagem a ser impressa juntamente com esse argumento, se desejarmos.
A função sys.exit() retorna a exceção SystemExit, juntamente com um argumento passado (opcional). O vaor inteiro 0, passado como argumento, significa que o programa foi finalizado com sucesso. Qualquer outro argumento indica que houve alguma falha no encerramento do script.
Note que se sys.exit for chamado dentro de uma estrutura como um encadeamento ou condicional, somente essa estrutura é encerrada, pois a exceção é gerada dentro do subprocesso específico.
Exceção SystemExit
A função sys.exit() lança a exceção SystemExit.
De acordo com a documentação oficial do Python, ‘a exceção SystemExit é levantada pela função sys.exit(). Uma chamada a essa função é traduzida em uma exceção de modo que os manipuladores de limpeza possam ser executados, e um debugador possa executar um script sem correr o risco de perder controle sobre ele‘.
Se esta exceção for levantada e não puder ser tratada, o interpretador do Python encerra a execução do código.
Consideramos a função sys.exit() como uma boa prática a ser empregada em código de produção (ou seja em seus programas de produção!)
Função os._exit()
Outra função que pode ser empregada para sair de um programa em Python é a função os._exit(). Este comando termina o processo em execução do programa, com um status de saída especificado, o que permite maior controle sobre o descarregamento do programa.
Exemplo:
import os
lista = ['Azul', 'Vermelho', 'Amarelo', 'Verde', 'Cinza', 'Marrom']
for cor in lista:
if cor == 'Amarelo':
os._exit(0) # 0 é o status de saída retornado ao encerrar.
print(cor)
os._exit(n): Geralmente empregado para sair de um processo com um status n específico, e sem chamar nenhum manipulador de limpeza, sem esvaziar buffers de entrada e saída (stdio), etc. Não retorna nada também.
Deve ser usado apenas em cenários muito específicos, como após o emprego de chamadas de sistema com os.fork
A melhor forma de sair de um programa é com o método sys.exit(), portanto.
Encontrei essa informação quando pesquisava sobre o assunto:
https://stackoverflow.com/questions/19747371/python-exit-commands-why-so-many-and-when-should-each-be-used
Desde então tenho usado simplesmente
raise SystemExit
porque não precisa sequer carregar o módulo sys.