Nascondi tutti gli avvisi in ipython


300

Devo produrre uno screencast di una sessione ipython e, per evitare confusione nei visualizzatori, desidero disabilitare tutti gli avvisi emessi dalle warnings.warnchiamate da pacchetti diversi. C'è un modo per configurare il file ipythonrc per disabilitare automaticamente tutti questi avvisi?


3
nota quando puoi che dovresti accettare la tua risposta, quindi vai a controllare le altre tue domande e vedi se hanno delle risposte accettabili.
Dan D.

Risposte:


716

Alla fine l'ho capito. Posto:

import warnings
warnings.filterwarnings('ignore')

dentro ~/.ipython/profile_default/startup/disable-warnings.py. Lascio questa domanda e rispondo per la cronaca nel caso in cui altri incontrino lo stesso problema.

Abbastanza spesso è utile vedere un avviso una volta. Questo può essere impostato da:

warnings.filterwarnings(action='once')

8
Funziona anche con gli avvisi del notebook IPython. Bella soluzione :)
Keith Hughitt il

6
@FrozenFlame, lo ripristini in 'default' Vedi: docs.python.org/2/library/warnings.html
AZhao,

36
Puoi anche eseguirlo in un blocco note, al fine di sopprimere solo (certi) avvisi in un blocco note specifico
Vasco

Mi succede qualcosa di strano, lavoro sul taccuino di Kaggle e anche se imposto warnings.filterwarnings('ignore')all'inizio della mia sceneggiatura, ricevo comunque degli avvisi. Dovrebbe essere correlato al fatto che io uso l'acceleratore TPU, il TPU ha un comportamento particolare in questo caso ... Mi chiedo. Non capisco.
Catalina Chircu,

57

Nascondo gli avvisi nelle caselle rosa eseguendo il seguente codice in una cella:

from IPython.display import HTML
HTML('''<script>
code_show_err=false; 
function code_toggle_err() {
 if (code_show_err){
 $('div.output_stderr').hide();
 } else {
 $('div.output_stderr').show();
 }
 code_show_err = !code_show_err
} 
$( document ).ready(code_toggle_err);
</script>
To toggle on/off output_stderr, click <a href="javascript:code_toggle_err()">here</a>.''')

2
Nonostante il downvote, credo ancora che sia stato un suggerimento utile, poiché è più facile da attivare, rispetto alla risposta accettata.
Matthiash,

Adoro questa soluzione. Ho salvato in un modulo esterno e aggiunto alle importazioni.
Adam,

3
Questo non funziona più con jupyter lab (anche se sarebbe bello se fosse :)
Ajasja

1
Ha funzionato ! la risposta accettata non mi ha aiutato. Grazie @matthiash
Gonzalo Garcia il

4

La risposta accettata non funziona in Jupyter (almeno quando si usano alcune librerie).

Le soluzioni Javascript qui nascondono solo avvisi che stanno già mostrando ma non avvisi che sarebbero mostrati in futuro.

Per nascondere / scoprire gli avvisi in Jupyter e JupyterLab ho scritto il seguente script che essenzialmente attiva o disattiva i CSS per nascondere / scoprire gli avvisi.

%%javascript
(function(on) {
const e=$( "<a>Setup failed</a>" );
const ns="js_jupyter_suppress_warnings";
var cssrules=$("#"+ns);
if(!cssrules.length) cssrules = $("<style id='"+ns+"' type='text/css'>div.output_stderr { } </style>").appendTo("head");
e.click(function() {
    var s='Showing';  
    cssrules.empty()
    if(on) {
        s='Hiding';
        cssrules.append("div.output_stderr, div[data-mime-type*='.stderr'] { display:none; }");
    }
    e.text(s+' warnings (click to toggle)');
    on=!on;
}).click();
$(element).append(e);
})(true);

Ricevo l'errore "Errore Javescript: $ non definito"
Ben

@Ben stai usando jupyter nel browser? I notebook in VSCode non caricano $ (jQuery)
robert il

Sì, lo so (Google Chrome)
Ben

Funziona come un fascino! Grazie!
Douglas Daly,

Neanche per me funziona. Ricevo lo stesso errore di Ben (sto usando JupyterLab).
Tobias Bergkvist,

2

Per jupyter lab questo dovrebbe funzionare (@Alasja)

from IPython.display import HTML
HTML('''<script>
var code_show_err = false; 
var code_toggle_err = function() {
 var stderrNodes = document.querySelectorAll('[data-mime-type="application/vnd.jupyter.stderr"]')
 var stderr = Array.from(stderrNodes)
 if (code_show_err){
     stderr.forEach(ele => ele.style.display = 'block');
 } else {
     stderr.forEach(ele => ele.style.display = 'none');
 }
 code_show_err = !code_show_err
} 
document.addEventListener('DOMContentLoaded', code_toggle_err);
</script>
To toggle on/off output_stderr, click <a onclick="javascript:code_toggle_err()">here</a>.''')

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.