Ocultar todos os avisos no ipython

300

Preciso produzir um screencast de uma sessão ipython e, para evitar confusão de visualizadores, quero desativar todos os avisos emitidos por warnings.warnchamadas de pacotes diferentes. Existe uma maneira de configurar o arquivo ipythonrc para desativar automaticamente todos esses avisos?

astrofrog
fonte
3
observe quando você pode aceitar sua resposta e, em seguida, verifique suas outras perguntas e veja se elas têm respostas aceitáveis.
Dan D.

Respostas:

716

Eu finalmente descobri. Lugar, colocar:

import warnings
warnings.filterwarnings('ignore')

por dentro ~/.ipython/profile_default/startup/disable-warnings.py. Estou deixando esta pergunta e respondendo para o registro, caso alguém encontre o mesmo problema.

Muitas vezes, é útil ver um aviso uma vez. Isso pode ser definido por:

warnings.filterwarnings(action='once')
astrofrog
fonte
8
Também funciona para avisos de notebooks IPython. Agradável correção :)
Keith Hughitt
6
@FrozenFlame, você mudá-lo de volta ao 'default' See: docs.python.org/2/library/warnings.html
AZhao
36
Você também pode executar este no um notebook, a fim de suprimir apenas (certas) advertências em um notebook específico
Vasco
Algo estranho acontece comigo, eu trabalho no caderno Kaggle e, mesmo que defina warnings.filterwarnings('ignore')no início do meu script, recebo avisos de qualquer maneira. Caso esteja relacionado ao fato de eu usar o acelerador TPU, o TPU tem um comportamento específico nesse caso ... eu me pergunto. Eu não entendi.
Catalina Chircu
57

Oculto os avisos nas caixas cor de rosa executando o seguinte código em uma célula:

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
fonte
2
Apesar do voto negativo, ainda acredito que foi uma dica útil, pois é mais fácil alternar, em comparação com a resposta aceita.
matthiash
Eu amo essa solução. Salvei em um módulo externo e adicionei às importações.
Adam
3
Isto já não trabalha com laboratório jupyter (embora que seria legal se ele iria :)
Ajasja
1
Funcionou ! a resposta aceita não me ajudou. Obrigado @matthiash
Gonzalo Garcia
4

A resposta aceita não funciona no Jupyter (pelo menos ao usar algumas bibliotecas).

As soluções Javascript aqui ocultam apenas os avisos que já estão sendo exibidos, mas não os que seriam mostrados no futuro.

Para ocultar / exibir avisos no Jupyter e JupyterLab, escrevi o seguinte script que basicamente alterna o css para ocultar / exibir avisos.

%%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
fonte
Eu recebo o erro "Erro Javescript: $ não está definido"
Ben
@Ben você está usando jupyter no navegador? Os notebooks no VSCode não carregam $ (jQuery)
robert
Sim, eu faço (Google Chrome)
Ben
Funciona como um encanto! Obrigado!
Douglas Daly
Também não funciona para mim. Estou recebendo o mesmo erro que Ben (estou usando o JupyterLab).
Tobias Bergkvist
2

Para o laboratório jupyter, isso deve funcionar (@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
fonte
2

Isso funciona sempre -

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