9.2 Come funziona

Sono state fatte alcune modifiche all'interprete:

Le funzioni di tracciamento possiedono tre argomenti: frame, event e arg. frame è lo stack frame corrente. event è una stringa: 'call', 'line', 'return', 'exception', 'c_call', 'c_return' o 'c_exception'. arg dipende dal tipo di evento.

La funzione di tracciamento globale viene invocata (con event impostato a 'call') ogni volta che viene inserito un nuovo scope locale; dovrebbe restituire un riferimento alla funzione locale di tracciamento da usare con quello scope o None se lo scope non deve essere tracciato.

La funzione di tracciamento locale dovrebbe restituire un riferimento a se stessa (o ad un'altra funzione per ulteriori tracciamenti in quello scope) o None per interrompere il tracciamento nello scope.

Vengono accettati anche metodi di istanza (e sono molto utili!) come funzioni di tracciamento.

Gli eventi possiedono il seguente significato:

'call'
Viene chiamata una funzione (o altri blocchi di codice inseriti). La funzione globale di tracciamento viene chiamata; arg vale None; il valore di restituito specifica la funzione di tracciamento locale.

'line'
L'interprete sta per eseguire una nuova riga di codice (a volte esistono più righe di evento in una stessa riga). Viene chiamata la funzione di tracciamento locale ; arg vale None; il valore restituito specifica la nuova funzione di tracciamento locale.

'return'
Una funzione (o un'altro blocco di codice) sta per terminare. Viene chiamata la funzione di tracciamento locale; arg è il valore che verrà restituito. Il valore restituito dalla funzione di tracciamento viene ignorato.

'exception'
Un'eccezione è stata sollevata. Viene chiamata la funzione di tracciamento locale; arg è una tupla di tre elementi ((eccezione, valore, traceback)); il valore restituito specifica la nuova funzione di tracciamento locale.

'c_call'
Sta per essere chiamata una funzione C. Questa può essere un'estensione o una funzione built-in. arg è il nome della funzione C.

'c_return'
Una funzione Cha terminato. arg vale None.

'c_exception'
La funzione Cha sollevato un'eccezione. arg vale None.

Notate che come un'eccezione si propaga nella catena delle chiamate, allo stesso modo un evento 'exception' viene generato ad ogni livello.

Per ulteriori informazioni su codice e oggetti frame, fate riferimento al Manuale di riferimento di Python.

Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.