# 16. Anexă

## 16.1. Modul interactiv

### 16.1.1. Tratarea erorilor

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

Tastând caracterul de întrerupere (de obicei, ``Control`-`C`` ori `Delete`) a execuției, fie la promptul primar fie la cel secundar, vom produce oprirea introducerii de caractere de la tastatură și revenirea la promptul primar. 1 Dacă tastăm caracterul de întrerupere în timp ce se derulează vreo execuție de comandă, atunci va fi lansată o excepție `KeyboardInterrupt`, a cărei interceptare poate fi proiectată, de dumneavoastră înșivă, cu ajutorul unei instrucțiuni `try`.

### 16.1.2. Scripturi Python executabile

În sistemele Unix de tip BSD, scripturile Python pot fi transformate în scripturi executabile direct, aidoma scripturilor interpretorului de comenzi activ în sesiunea de terminal, prin inserarea liniei de cod

    #!/usr/bin/env python3.5

chiar la începutul scriptului, respectiv adăugând permisiunilor fișierului în care ați introdus scriptul și permisiunea ca acesta să poată fi executat (ceea ce înseamnă a-i atribui fișierului un mod executabil). Evident, am presupus că variabila de mediu `PATH` din contul dumneavoastră de utilizator conține (și) calea de acces către interpretor. Este necesar ca simbolul bi-semn `#!` să fie așezat chiar la începutul fișierului. Pe anumite platforme, primul rând trebuie să se termine cu un caracter de încheiere de rând în stil Unix (adică, `'\n'`) și nu cu cele două caractere (invizibile) care desemnează, în Windows, sfârșitul unui rând (`'\r\n'`). Nu uitați că diezul, denumit, în jargon informatic, caracter hash, `'#'`, este întrebuințat în Python la începerea unui comentariu (de un rând).

Pentru ca un script să primească un mod executabil, adică pentru a i se da permisiunea de a fi executat, vom folosi comanda chmod.

    $ chmod +x myscript.py

În sistemele Windows nu există acest „mod executabil”. Instalatorul de Python va realiza automat asocierea fișierelor `.py` cu `python.exe`, așa că, printr-un clic dublu pe un (simbol grafic al unui) fișier Python, acesta va rula ca script. Dacă facem uz de extensia `.pyw` (în locul lui `.py`), atunci fereastra terminalului, care apare la orice execuție de script, va fi suprimată.

### 16.1.3. Fișierul de pornire pentru sesiunea interactivă

Atunci când utilizați Python-ul în modul interactiv, este convenabil să aveți la îndemână un set de comenzi tipice, care să fie executate ori de câte ori porniți interpretorul. Puteți realiza așa ceva atribuindu-i unei variabile de mediu cu numele `PYTHONSTARTUP` drept valoare numele fișierului în care ați introdus setul respectiv de comenzi. Un atare procedeu seamănă cu cel datorită căruia preparați conținutul fișierului de configurare (la nivel de cont de utilizator) `.profile` al interpretoarelor de comenzi din sistemele Unix.

Fișierul (de pornire; de la englezescul, ca jargon informatic, startup file) va fi citit doar când deschideți o sesiune de lucru interactiv, nu și atunci când Python-ul își citește comenzile dintr-un fișier, și nici atunci când `/dev/tty` este sursa explicită a comenzilor (fișier care, altminteri, se comportă precum o sesiune interactivă). Execuția comenzilor din fișier va avea loc în același spațiu de nume unde se execută comenzile date interactiv, deci obiectele definite ori importurile făcute de comenzile din fișier vor putea fi utilizate fără nume calificate în timpul sesiunii interactive. De asemeni, puteți schimba promptul principal `sys.ps1` și promptul secundar `sys.ps2` în acest fișier de pornire.

Dacă doriți să fie citit și un fișier de pornire adițional, situat în directorul curent, atunci puteți realiza acest lucru introducând în fișierul de pornire global un fragment de cod aidoma acestuia: `if os.path.isfile('.pythonrc.py'): exec(open('.pythonrc.py').read())`. De asemeni, dacă sunteți interesați să întrebuințați fișierul de pornire într-un script, atunci va fi nevoie să îi adăugați acelui script un fragment de cod asemănător celui care urmează:

    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. Module de personalizare

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'

Calea de acces fiind găsită, vom crea un fișier denumit `usercustomize.py` în directorul respectiv și vom introduce în fișier comenzile dorite. Existența acestui fișier va influența toate invocările Python-ului, cu excepția situației în care pornirea se va face cu opțiunea `-s`, opțiune care dezactivează importurile automate.

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

Note de subsol

1

  O anumită defecțiune din pachetul GNU Readline ar putea să împiedice aceasta.