Verstecke alle Warnungen in ipython

300

Ich muss einen Screencast einer Ipython-Sitzung erstellen und um verwirrende Betrachter zu vermeiden, möchte ich alle Warnungen deaktivieren, die von warnings.warnAufrufen aus verschiedenen Paketen ausgegeben werden. Gibt es eine Möglichkeit, die ipythonrc-Datei so zu konfigurieren, dass alle derartigen Warnungen automatisch deaktiviert werden?

Astrofrog
quelle
3
Wenn Sie können, sollten Sie Ihre Antwort akzeptieren und dann Ihre anderen Fragen überprüfen, um festzustellen, ob sie akzeptable Antworten haben.
Dan D.

Antworten:

716

Ich habe es schließlich herausgefunden. Platz:

import warnings
warnings.filterwarnings('ignore')

innen ~/.ipython/profile_default/startup/disable-warnings.py. Ich lasse diese Frage und Antwort für den Fall, dass jemand anderes auf dasselbe Problem stößt.

Sehr oft ist es nützlich, eine Warnung einmal zu sehen. Dies kann eingestellt werden durch:

warnings.filterwarnings(action='once')
Astrofrog
quelle
8
Funktioniert auch für IPython-Notebook-Warnungen. Nice fix :)
Keith Hughitt
6
@FrozenFlame, Sie ändern es wieder auf "Standard". Siehe: docs.python.org/2/library/warnings.html
AZhao
36
Sie können dies auch in einem Notizbuch ausführen, um nur (bestimmte) Warnungen in einem bestimmten Notizbuch zu unterdrücken
Vasco
Mir passiert etwas Seltsames, ich arbeite an einem Kaggle-Notizbuch, und selbst wenn ich es warnings.filterwarnings('ignore')am Anfang meines Skripts einstelle , erhalte ich trotzdem Warnungen. Sollte es mit der Tatsache zusammenhängen, dass ich TPU-Beschleuniger verwende, hat TPU in diesem Fall ein bestimmtes Verhalten ... Ich frage mich. Ich verstehe nicht.
Catalina Chircu
57

Ich verstecke die Warnungen in den rosa Feldern, indem ich den folgenden Code in einer Zelle ausführe:

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>.''')
matthiash
quelle
2
Trotz der Ablehnung bin ich immer noch der Meinung, dass dies ein nützlicher Tipp war, da das Umschalten im Vergleich zur akzeptierten Antwort einfacher ist.
Matthiash
Ich liebe diese Lösung. Ich habe in einem externen Modul gespeichert und zu den Importen hinzugefügt.
Adam
3
Dies funktioniert nicht mehr mit Jupyter Lab (obwohl es cool wäre, wenn es wäre :)
Ajasja
1
Es funktionierte ! Die akzeptierte Antwort hat mir nicht geholfen. Vielen Dank, dass Sie @matthiash
Gonzalo Garcia
4

Die akzeptierte Antwort funktioniert in Jupyter nicht (zumindest bei Verwendung einiger Bibliotheken).

Die Javascript-Lösungen hier verbergen nur Warnungen, die bereits angezeigt werden, aber keine Warnungen, die in Zukunft angezeigt werden.

Um Warnungen in Jupyter und JupyterLab ein- und auszublenden, habe ich das folgende Skript geschrieben, das CSS im Wesentlichen umschaltet, um Warnungen auszublenden / einzublenden.

%%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);
Robert
quelle
Ich erhalte die Fehlermeldung "Javescript-Fehler: $ ist nicht definiert"
Ben
@ Ben benutzt du jupyter im Browser? Notebooks in VSCode laden nicht $ (jQuery)
robert
Ja, das tue ich (Google Chrome)
Ben
Klappt wunderbar! Danke dir!
Douglas Daly
Funktioniert auch bei mir nicht. Ich erhalte den gleichen Fehler wie Ben (ich verwende JupyterLab).
Tobias Bergkvist
2

Für Jupyter Lab sollte dies funktionieren (@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>.''')
ottowg
quelle
2

Das funktioniert jedes Mal -

import warnings
warnings.filterwarnings('ignore')
Rahul Bordoloi
quelle