# 16. Appendice

## 16.1. Modalità Interattiva

### 16.1.1. Gestione degli Errori

Quando si verifica un errore, l’interprete stampa un messaggio di errore e una traccia dello stack. In modalità interattiva, quindi ritorna al prompt principale; quando l’input proviene da un file, esce con uno stato di uscita diverso da zero dopo aver stampato la traccia dello stack. (Le eccezioni gestite da una clausola `except` in un’istruzione `try` non sono errori in questo contesto.) Alcuni errori sono incondizionatamente fatali e causano un’uscita con uno stato di uscita diverso da zero; questo si applica alle incoerenze interne e a certi casi di esaurimento della memoria. Tutti i messaggi di errore sono scritti sul flusso standard degli errori; l’output normale dei comandi eseguiti è scritto sul flusso standard dell’output.

Digitare il carattere d’interruzione (di solito `Control`-`C` o `Delete`) al prompt principale o secondario cancella l’input e ritorna al prompt principale. [1] Digitando un’interruzione mentre un comando è in esecuzione si solleva l’eccezione `KeyboardInterrupt`, che può essere gestita da un’istruzione `try`.

### 16.1.2. Script Eseguibili Python

Nei sistemi Unix di tipo BSD, gli script Python possono essere resi direttamente eseguibili, come gli script di shell, aggiungendo la riga

    #!/usr/bin/env python3

(supponendo che l’interprete sia nel `PATH` dell’utente) all’inizio dello script e dando al file un permesso eseguibile. Il `#!` deve essere i primi due caratteri del file. Su alcune piattaforme, questa prima riga deve terminare con un fine riga in stile Unix (`'\n'`), non con un fine riga in stile Windows (`'\r\n'`). Nota che il carattere cancelleto, `'#'`, è usato per iniziare un commento in Python.

Lo script può essere reso eseguibile, o avere i permessi, usando il comando chmod.

    $ chmod +x myscript.py

Nei sistemi Windows, non esiste il concetto di «modalità eseguibile». L’installatore Python associa automaticamente i file `.py` con `python.exe` in modo che un doppio clic su un file Python lo esegua come uno script. L’estensione può anche essere `.pyw`; in tal caso, la finestra della console che appare normalmente viene soppressa.

### 16.1.3. Il File di Avvio Interattivo

Quando usi Python in modalità interattiva, è spesso utile avere alcuni comandi standard eseguiti ogni volta che l’interprete viene avviato. Puoi fare ciò impostando una variabile di ambiente chiamata `PYTHONSTARTUP` al nome di un file contenente i tuoi comandi di avvio. Questo è simile alla funzionalità `.profile` delle shell Unix.

Questo file viene letto solo nelle sessioni interattive, non quando Python legge i comandi da uno script, e non quando `/dev/tty` è dato come fonte esplicita dei comandi (che altrimenti si comporta come una sessione interattiva). Viene eseguito nello stesso namespace dove vengono eseguiti i comandi interattivi, quindi gli oggetti che definisce o importa possono essere usati senza qualificazioni nella sessione interattiva. Puoi anche cambiare i prompt `sys.ps1` e `sys.ps2` in questo file.

Se vuoi leggere un file di avvio aggiuntivo dalla directory corrente, puoi programmare questo nel file di avvio globale usando il codice come `if os.path.isfile('.pythonrc.py'): exec(open('.pythonrc.py').read())`. Se vuoi usare il file di avvio in uno script, devi farlo esplicitamente nello 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. I Moduli di Personalizzazione

Python fornisce due hook per permetterti di personalizzarlo: sitecustomize e usercustomize. Per vedere come funziona, devi prima trovare la posizione della directory user site-packages. Avvia Python ed esegui questo codice:

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

Ora puoi creare un file chiamato `usercustomize.py` in quella directory e inserire ciò che vuoi in esso. Questo influenzerà ogni invocazione di Python, a meno che non sia avviato con l’opzione `-s` per disabilitare l’importazione automatica.

sitecustomize funziona allo stesso modo, ma è tipicamente creato da un amministratore del computer nella directory globale site-packages e viene importato prima di usercustomize. Per maggiori dettagli, vedi la documentazione del modulo `site`.

Note a pie” di pagina

[1]

Un problema con il pacchetto GNU Readline potrebbe impedirlo.