# 16. Annexe

## 16.1. Mode interactif

### 16.1.1. Gestion des erreurs

When an error occurs, the interpreter prints an error message and a stack trace. In interactive mode, it then returns to the primary prompt; when input came from a file, it exits with a nonzero exit status after printing the stack trace. (Exceptions handled by an `except` clause in a `try` statement are not errors in this context.) Some errors are unconditionally fatal and cause an exit with a nonzero exit status; this applies to internal inconsistencies and some cases of running out of memory. All error messages are written to the standard error stream; normal output from executed commands is written to standard output.

Taper le caractère d'interruption (généralement ``Ctrl`+`C`` ou `Supprimer`) au niveau de l'invite de commande primaire annule l'entrée et revient à l'invite [1]. Saisir une interruption tandis qu'une commande s'exécute lève une exception `KeyboardInterrupt` qui peut être gérée par une instruction `try`.

### 16.1.2. Scripts Python exécutables

Sur les systèmes Unix, un script Python peut être rendu directement exécutable, comme un script shell, en ajoutant la ligne

    #!/usr/bin/env python3.5

(en supposant que l'interpréteur est dans le `PATH` de l'utilisateur) au début du script et en rendant le fichier exécutable. `'#!'` doivent être les deux premiers caractères du fichier. Sur certaines plateformes, cette première ligne doit finir avec une fin de ligne de type Unix (`'\n'`) et pas de type Windows (`'\r\n'`). Notez que le caractère croisillon, `'#'`, est utilisé pour initier un commentaire en Python.

Un script peut être rendu exécutable en utilisant la commande chmod.

    $ chmod +x myscript.py

Sur les systèmes Windows il n'y a pas de "mode exécutable". L'installateur Python associe automatiquement les fichiers en `.py` avec `python.exe` de telle sorte qu'un double clic sur un fichier Python le lance comme un script. L'extension peut aussi être `.pyw`. Dans ce cas, la console n'apparait pas.

### 16.1.3. Configuration du mode interactif

En mode interactif, il peut être pratique de faire exécuter quelques commandes au lancement de l’interpréteur. Configurez la variable d'environnement `PYTHONSTARTUP` avec le nom d'un fichier contenant les instructions à exécuter, à la même manière du `.profile` pour un shell Unix.

Ce fichier n'est lu qu'en mode interactif, pas quand Python lit les instructions depuis un fichier, ni quand `/dev/tty` est donné explicitement comme fichier source (pour tout le reste, Python se comporte alors comme dans une session interactive). Les instructions de ce fichier sont exécutées dans le même espace de nommage que vos commandes, donc les objets définis et modules importés peuvent être utilisés directement dans la session interactive. Dans ce fichier, il est aussi possible de changer les invites de commande `sys.ps1` et `sys.ps2`.

Si vous voulez exécuter d'autres fichiers du dossier courant au démarrage, vous pouvez le programmer dans le fichier de démarrage global, par exemple avec le code suivant : `if os.path.isfile('.pythonrc.py'): exec(open('.pythonrc.py').read())`. Et si vous voulez exécuter le fichier de démarrage depuis un script, vous devez le faire explicitement dans le 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. Modules de personnalisation

Python provides two hooks to let you customize it: sitecustomize and usercustomize. To see how it works, you need first to find the location of your user site-packages directory. Start Python and run this code:

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

Vous pouvez maintenant y créer un fichier `usercustomize.py` et y écrire ce que vous voulez. Il est toujours pris en compte par Python, peu importe le mode, sauf lorsque vous démarrez avec l'option `-s` qui désactive l'importation automatique.

sitecustomize works in the same way, but is typically created by an administrator of the computer in the global site-packages directory, and is imported before usercustomize. See the documentation of the `site` module for more details.

Notes

[1]

Un problème avec GNU Readline peut l'en empêcher.