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?


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

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

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

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.