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?


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')

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>.''')

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);

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>.''')

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.