16. Anexo
*********


16.1. Modo interativo
=====================


16.1.1. Tratamento de erros
---------------------------

Quando um erro ocorre, o interpretador exibe uma mensagem de erro e um
*stack trace* (rastreamento de pilha). Se estiver no modo interativo,
ele volta para o prompt primário; se a entrada veio de um arquivo, a
execução termina com um status de saída *nonzero* (diferente de zero)
após a exibição do *stack trace*. (Exceções tratadas por uma cláusula
"except" numa declaração "try" não são consideradas erros, nesse
contexto.) Alguns erros são irremediavelmente graves e causam términos
de execução com status de saída *nonzero*; isso pode acontecer devido
a inconsistências internas e em alguns casos por falta de memória.
Todas as mensagens de erro são escritas no fluxo de erros padrão; a
saída normal resultante da execução de comandos é escrita no canal de
saída padrão.

Digitar o caractere de interrupção (geralmente "Control-C" ou
"Delete") em prompts primários ou secundários interrompe a entrada de
dados e retorna ao prompt primário. [1] Digitar a interrupção durante
a execução de um comando levanta a exceção "KeyboardInterrupt", que
pode ser tratada por meio de uma declaração "try".


16.1.2. Scripts Python executáveis
----------------------------------

Em sistemas Unix similares ao BSD, scripts Python podem ser executados
diretamente, tal como scripts shell, se tiverem a linha de código

   #!/usr/bin/env python3.5

(presumindo que o interpretador está na "PATH" do usuário) no começo
do script e configurando o arquivo no modo executável. Os dois
primeiros caracteres do arquivo devem ser "#!". Em algumas
plataformas, essa primeira linha deve terminar com uma quebra de linha
em estilo Unix ("'\n'"), e não em estilo Windows ("'\r\n'"). Note que
o caractere cerquilha, "'#'", é usado em Python para marcar o início
de um comentário.

O script pode receber a permissão para atuar em modo executável
através do comando **chmod**.

   $ chmod +x myscript.py

Em sistemas Windows, não existe a noção de "modo executável". O
instalador do Python associa automaticamente os arquivos ".py" ao
"python.exe", de modo que um clique duplo em um arquivo Python o
executará como um script. A extensão pode ser também ".pyw", o que
omite a janela de console que normalmente aparece.


16.1.3. Arquivo de inicialização do modo interativo
---------------------------------------------------

Quando se usa o Python no modo interativo, pode ser útil definir
alguns comandos que sejam executados automaticamente toda vez que o
interpretador for inicializado. Isso pode ser feito configurando-se
uma variável de ambiente chamada "PYTHONSTARTUP" para que ela aponte
para o arquivo contendo esses comandos. Isso é similar ao recurso
".profile" das shells Unix.

Esse arquivo será lido apenas em sessões do modo interativo, e não
quando Python lê comandos de um script, tampouco quando "/dev/tty" é
passado explicitamente como a origem dos comandos (neste caso, teremos
um comportamento similar a uma sessão interativa padrão). Ele é
executado no mesmo espaço de nomes em que os comandos interativos são
executados, de modo que os objetos que ele define ou importa possam
ser usados sem qualificação na sessão interativa. Também é possível
alterar os prompts "sys.ps1" e "sys.ps2" no mesmo arquivo.

Caso deseje usar um arquivo de inicialização adicional a partir do
atual diretório de trabalho, você pode programá-lo no arquivo de
inicialização global usando um código parecido com "if
os.path.isfile('.pythonrc.py'): exec(open('.pythonrc.py').read())". Se
quiser usar o arquivo de inicialização num script, será necessário
fazê-lo explicitamente no script:

   import os
   filename = os.environ.get('PYTHONSTARTUP')
   if filename and os.path.isfile(filename):
       with open(filename) as fobj:
           startup_file = fobj.read()
       exec(startup_file)


16.1.4. Módulos de customização
-------------------------------

Python oferece dois *hooks* que permitem sua customização:
"sitecustomize" e "usercustomize". Para entender como funcionam,
primeiro você deve localizar o diretório site-packages do usuário.
Inicie o Python e execute este código:

   >>> import site
   >>> site.getusersitepackages()
   '/home/user/.local/lib/python3.5/site-packages'

Agora você pode criar um arquivo chamado "usercustomize.py" neste
diretório e colocar qualquer coisa que quiser dentro. Isto vai afetar
toda invocação do Python, a menos que seja iniciado com a opção "-s"
para desabilitar a importação automática.

"sitecustomize" funciona da mesma forma, mas normalmente é criado por
um administrador do computador no diretório site-packages global e é
importado antes de "usercustomize". Veja a documentação do módulo
"site" para mais detalhes.

-[ Notas de rodapé ]-

[1] Um problema com o pacote GNU Readline pode impedir que isso
    aconteça.
