Ocultar todas las advertencias en ipython

300

Necesito producir un screencast de una sesión de ipython, y para evitar confundir a los espectadores, quiero deshabilitar todas las advertencias emitidas por warnings.warnllamadas de diferentes paquetes. ¿Hay alguna forma de configurar el archivo ipythonrc para deshabilitar automáticamente todas esas advertencias?

astrofrog
fuente
3
tenga en cuenta que cuando pueda debe aceptar su respuesta, y luego verifique sus otras preguntas y ver si tienen alguna respuesta aceptable.
Dan D.

Respuestas:

716

Finalmente lo descubrí. Sitio:

import warnings
warnings.filterwarnings('ignore')

en el interior ~/.ipython/profile_default/startup/disable-warnings.py. Dejo esta pregunta y respuesta para el registro en caso de que alguien más se encuentre con el mismo problema.

Muy a menudo es útil ver una advertencia una vez. Esto puede ser establecido por:

warnings.filterwarnings(action='once')
astrofrog
fuente
8
También funciona para las advertencias de portátiles IPython. Buena solución :)
Keith Hughitt
66
@FrozenFlame, lo cambia de nuevo a 'predeterminado' Consulte: docs.python.org/2/library/warnings.html
AZhao
36
También puede ejecutar esto en un cuaderno, para suprimir solo (ciertas) advertencias en un cuaderno específico
Vasco
Me ocurre algo extraño, trabajo en el cuaderno de Kaggle, e incluso si configuro warnings.filterwarnings('ignore')al comienzo de mi guión, recibo advertencias de todos modos. Si se relaciona con el hecho de que uso el acelerador de TPU, ¿tiene TPU un comportamiento particular en este caso? Me pregunto. No entiendo.
Catalina Chircu
57

Oculto las advertencias en los cuadros rosados ​​ejecutando el siguiente código en una celda:

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
fuente
2
A pesar del voto negativo, todavía creo que fue un consejo útil, ya que es más fácil alternar, en comparación con la respuesta aceptada.
matthiash
Amo esta solución Lo guardé en un módulo externo y lo agregué a las importaciones.
Adam
3
Esto ya no funciona con jupyter lab (aunque sería genial si lo hiciera :)
Ajasja
1
Funcionó ! La respuesta aceptada no me ayudó. Gracias @matthiash
Gonzalo Garcia
4

La respuesta aceptada no funciona en Jupyter (al menos cuando se usan algunas bibliotecas).

Las soluciones Javascript aquí solo ocultan advertencias que ya se muestran, pero no advertencias que se mostrarán en el futuro.

Para ocultar / mostrar advertencias en Jupyter y JupyterLab, escribí el siguiente script que esencialmente alterna css para ocultar / mostrar advertencias.

%%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
fuente
Recibo el error "Error de Javescript: $ no está definido"
Ben
@Ben, ¿estás usando jupyter en el navegador? Las computadoras portátiles en VSCode no cargan $ (jQuery)
robert
Sí, lo hago (Google Chrome)
Ben
¡Funciona de maravilla! ¡Gracias!
Douglas Daly
A mí tampoco me funciona. Recibo el mismo error que Ben (estoy usando JupyterLab).
Tobias Bergkvist
2

Para jupyter lab esto debería 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
fuente
2

Esto funciona siempre

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