HOWTO · Python

Elimina gli avvisi in Python

Questo tutorial mostra come sopprimere gli avvisi nei programmi in python.

In questa pagina

Per sopprimere gli avvisi di Python, scegli l’ambito: usa warnings.filterwarnings() in uno script, python -W ignore script.py per un singolo processo oppure imposta PYTHONWARNINGS=ignore prima di avviare Python. Puoi anche filtrare una categoria di avvisi o usare un gestore di contesto per nascondere i messaggi solo in un determinato blocco.

Gli avvisi segnalano condizioni che potrebbero richiedere attenzione, come l’uso di un’API deprecata. Da soli non interrompono l’esecuzione; le eccezioni rappresentano invece errori durante l’esecuzione, che possono interrompere una specifica operazione o propagarsi se non vengono gestite. Leggi un avviso prima di nasconderlo: la soppressione può celare un problema di compatibilità che potrebbe diventare importante in seguito.

Sopprimere gli avvisi con il modulo warnings

Il modulo warnings della libreria standard consente a uno script di filtrare i messaggi. Chiama warnings.filterwarnings("ignore") per ignorare in modo ampio gli avvisi nel processo, oppure indica criteri come una categoria o un messaggio per selezionare un sottoinsieme. I filtri agiscono sugli avvisi che corrispondono ai criteri; gli altri restano visibili. Inserisci un filtro circoscritto vicino al codice che ne ha bisogno e rimuovilo quando hai risolto il problema alla radice.

Esegui questo esempio autonomo:

import warnings

warnings.filterwarnings("ignore", category=UserWarning, message="cache is stale")
warnings.warn("cache is stale", UserWarning)
print("program continues")
program continues

Il filtro corrisponde ai messaggi UserWarning che iniziano con il testo indicato, quindi l’avviso corrispondente viene nascosto. La stampa finale mostra il testo «program continues» in inglese e dimostra che l’esecuzione prosegue dopo la chiamata che genera l’avviso.

Per applicare un filtro temporaneo, usa warnings.catch_warnings() e installa il filtro all’interno del relativo blocco with. Quando il blocco termina, Python ripristina lo stato dei filtri degli avvisi attivo al suo inizio. È utile per gestire un’operazione notoriamente rumorosa senza alterare la normale gestione degli avvisi nel codice non correlato. Per esempio, lo schema è with warnings.catch_warnings(): warnings.simplefilter("ignore", category=DeprecationWarning); operation(). Mantieni l’operazione all’interno del blocco: le chiamate successive usano i filtri ripristinati.

Sopprimere gli avvisi dalla riga di comando

Passa l’opzione -W di Python prima del nome dello script per impostare un filtro degli avvisi all’avvio dell’interprete. Per ignorare gli avvisi in quel processo, esegui python -W ignore script.py oppure la forma compatta equivalente python -Wignore script.py. La grafia protetta -Wignore è l’opzione seguita immediatamente dall’azione ignore. Sostituisci script.py con il nome del tuo file e lascia dopo di esso gli eventuali argomenti dello script.

Questa opzione si applica all’avvio dell’interprete e non modifica lo script. È utile quando esegui uno strumento che non puoi modificare o quando vuoi avviarlo una sola volta con questa impostazione. Un filtro dalla riga di comando può nascondere informazioni diagnostiche utili per l’intera esecuzione; se la soppressione generale coprirebbe informazioni importanti, preferisci un filtro specifico per categoria.

Sopprimere gli avvisi con la variabile d’ambiente PYTHONWARNINGS

Imposta PYTHONWARNINGS prima di avviare Python per fornire al nuovo processo le azioni di filtro degli avvisi. Per esempio, in una shell POSIX usa PYTHONWARNINGS=ignore python script.py; in PowerShell usa $env:PYTHONWARNINGS = "ignore" e poi esegui python script.py. Queste assegnazioni dipendono dalla shell e la variabile deve essere presente nell’ambiente quando viene avviato l’interprete.

Questa impostazione è utile quando il processo è controllato da un programma di avvio o dall’ambiente di distribuzione. Si applica ai processi Python avviati con quell’ambiente e non modifica la gestione degli avvisi di un interprete già in esecuzione. Rimuovi la variabile o imposta un filtro più circoscritto quando vuoi tornare a vedere gli avvisi. Con tutti e tre i metodi, sopprimi solo i messaggi che hai valutato e rivedi il filtro quando cambiano le dipendenze o le API.