Ukryj wszystkie ostrzeżenia w ipython

300

Muszę utworzyć zrzut ekranu z sesji ipython i aby uniknąć mylących widzów, chcę wyłączyć wszystkie ostrzeżenia emitowane przez warnings.warnpołączenia z różnych pakietów. Czy istnieje sposób skonfigurowania pliku ipythonrc w celu automatycznego wyłączania wszystkich takich ostrzeżeń?

astrofrog
źródło
3
zanotuj, kiedy możesz, powinieneś zaakceptować swoją odpowiedź, a następnie sprawdź pozostałe pytania i sprawdź, czy mają one akceptowalne odpowiedzi.
Dan D.

Odpowiedzi:

716

W końcu to rozgryzłem. Miejsce:

import warnings
warnings.filterwarnings('ignore')

w środku ~/.ipython/profile_default/startup/disable-warnings.py. Zostawiam to pytanie i odpowiedź na wszelki wypadek, na wypadek, gdyby ktoś napotkał ten sam problem.

Dość często warto raz zobaczyć ostrzeżenie. Można to ustawić:

warnings.filterwarnings(action='once')
astrofrog
źródło
8
Działa również w przypadku ostrzeżeń notebooka IPython. Niezła poprawka :)
Keith Hughitt
6
@FrozenFlame, zmienisz go z powrotem na „domyślny” Patrz: docs.python.org/2/library/warnings.html
AZhao
36
Możesz to również wykonać w notatniku, aby ukryć tylko (pewne) ostrzeżenia w jednym konkretnym notatniku
Vasco
Coś dziwnego mi się przytrafia, pracuję na notatniku Kaggle i nawet jeśli ustawię warnings.filterwarnings('ignore')na początku skryptu, i tak otrzymuję ostrzeżenia. Czy powinno to mieć związek z faktem, że używam akceleratora TPU, czy TPU ma w tym przypadku szczególne zachowanie ... Zastanawiam się. Nie rozumiem.
Catalina Chircu
57

Ukryłem ostrzeżenia w różowych polach, uruchamiając następujący kod w komórce:

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
źródło
2
Mimo negatywnej opinii, nadal uważaj, że była to przydatna wskazówka, ponieważ łatwiej ją przełączać w porównaniu z zaakceptowaną odpowiedzią.
matthiash,
Uwielbiam to rozwiązanie. Zapisałem w module zewnętrznym i dodałem do importów.
Adam
3
To już nie działa z laboratorium jupyter (choć byłoby fajnie, gdyby tak było :)
Ajasja
1
Zadziałało ! zaakceptowana odpowiedź nie pomogła mi. Dziękuję @matthiash
Gonzalo Garcia
4

Akceptowana odpowiedź nie działa w Jupyter (przynajmniej przy korzystaniu z niektórych bibliotek).

Rozwiązania JavaScript tutaj ukrywają tylko ostrzeżenia, które są już wyświetlane, ale nie ostrzeżenia, które będą wyświetlane w przyszłości.

Aby ukryć / odkryć ostrzeżenia w Jupyter i JupyterLab napisałem następujący skrypt, który zasadniczo przełącza css do ukrywania / odkrywania ostrzeżeń.

%%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
źródło
Pojawia się błąd „Błąd Javescript: $ nie jest zdefiniowany”
Ben
@ Ben używasz jupyter w przeglądarce? Notebooki w VSCode nie ładują $ (jQuery)
Robert
Tak, robię (Google Chrome)
Ben
Działa jak marzenie! Dziękuję Ci!
Douglas Daly
Dla mnie też nie działa. Otrzymuję ten sam błąd co Ben (używam JupyterLab).
Tobias Bergkvist
2

W przypadku jupyter lab powinno to działać (@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
źródło
2

Działa to za każdym razem -

import warnings
warnings.filterwarnings('ignore')
Rahul Bordoloi
źródło