3.11.4 Lo stack dell'interprete

Quando si dice che le funzioni descritte più avanti restituiscono dei ``frame record'', si intende che ognuno dei record è formato da una tupla di sei elementi: l'oggetto frame, il nome del file, il numero della riga di codice corrente, il nome della funzione, una lista di righe di contesto dal codice sorgente, e l'indice della riga corrente all'interno della lista.

Mantenere dei riferimenti agli oggetti frame, come quelli che vengono trovati come primo elemento dei frame record restituiti dalle funzioni qui descritte, può far sì che il vostro programma crei dei cicli di riferimenti. Una volta che un ciclo di riferimenti viene creato, il tempo di vita di tutti gli oggetti che formano il ciclo può diventare molto più lungo del voluto, anche se si è abilitato in Python il rilevatore di cicli, opzionale. Se tali cicli devono venire creati, è importante assicurare che vengano esplicitamente interrotti una volta esaurito il loro compito, per evitare di ritardare la distruzione degli oggetti a cui fa riferimento il ciclo, ed il conseguente aumento della memoria utilizzata.

Sebbene il rilevatore individui questi cicli, la distruzione dei frame (e delle variabili locali) può venire effettuata deterministicamente rimuovendo il ciclo con una clausola finally. Questo è anche importante quando la rilevazione dei cicli viene disabilitata durante la compilazione di Python o usando gc.disable(). Per esempio:

def handle_stackframe_without_leak():
    frame = inspect.currentframe()
    try:
        # fa qualcosa con il frame
    finally:
        del frame

L'argomento facoltativo context, supportato da molte di queste funzioni, specifica il numero di righe del contesto da restituire, incentrate sulla riga corrente.

getframeinfo( frame[, context])
Trova le informazioni su un oggetto frame o un traceback. Viene restituita una tupla di 5 elementi, corrispondenti agli ultimi cinque elementi del frame record.

getouterframes( frame[, context])
Trova una lista di frame record corrispondenti ai frame esterni rispetto a quello fornito. Questi frames rappresentano le chiamate che guidano la creazione del frame. La prima voce nell'elenco restituito rappresenta il frame; l'ultima voce rappresenta la chiamata più remota sullo stack del frame.

getinnerframes( traceback[, context])
Trova una lista di frame record per il frame del traceback e tutti i frame interni. Questi frame rappresentano chiamate fatte in conseguenza del frame. La prima voce nell'elenco rappresenta il traceback; l'ultima voce indica dove viene sollevata l'eccezione.

currentframe( )
Restituisce l'oggetto frame per le chiamate dello stack.

stack( [context])
Restituisce una lista di frame record per le chiamate dello stack. La prima voce dell'elenco restituito rappresenta il chiamante; l'ultima voce indica la chiamata più esterna sullo stack.

trace( [context])
Restituisce una lista di frame record per lo stack tra il frame corrente e quello in cui viene gestita la sollevazione dell'eccezione corrente. La prima voce dell'elenco restituito rappresenta il chiamante; l'ultima voce indica dove viene sollevata l'eccezione.
Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.