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:

Fechar aplicação Python com quit()

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:

Fechar aplicação Python com quit()

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.

 

Sobre Fábio dos Reis (1195 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 30 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Ciência e Tecnologia em geral, adora Viagens e Música, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.

1 Comentário em Comandos para sair de um script Python: exit(), quit(), sys.exit(), os_exit()

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

Escreva um comentário

Seu e-mail não será divulgado


*