![Previous Page](../icons/previous.png) |
![Up One Level](../icons/up.png) |
![Next Page](../icons/next.png) |
La libreria di riferimento di Python |
![Contents](../icons/contents.png) |
![Module Index](../icons/modules.png) |
![Index](../icons/index.png) |
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.
-
Restituisce l'oggetto frame per le chiamate dello stack.
-
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.
-
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.
![Previous Page](../icons/previous.png) |
![Up One Level](../icons/up.png) |
![Next Page](../icons/next.png) |
La libreria di riferimento di Python |
![Contents](../icons/contents.png) |
![Module Index](../icons/modules.png) |
![Index](../icons/index.png) |
Release 2.3.4, documentation updated on 21. maggio 2005.
Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.