431 votes

Masquer tous les avertissements dans ipython

Je dois produire un screencast d'une session ipython, et pour éviter de dérouter les spectateurs, je veux désactiver tous les avertissements émis par warnings.warn des appels provenant de différents paquets. Existe-t-il un moyen de configurer le fichier ipythonrc pour désactiver automatiquement tous ces avertissements ?

1039voto

astrofrog Points 3294

J'ai fini par comprendre. Place :

import warnings
warnings.filterwarnings('ignore')

à l'intérieur de ~/.ipython/profile_default/startup/disable-warnings.py . Je laisse cette question et cette réponse pour mémoire au cas où quelqu'un d'autre rencontrerait le même problème.

Très souvent, il est utile de voir un avertissement une seule fois. Ceci peut être réglé par :

warnings.filterwarnings(action='once')

11 votes

Fonctionne également pour les avertissements du cahier IPython. Belle correction :)

7 votes

@FrozenFlame, vous le remettez par défaut Voir : docs.python.org/2/library/warnings.html

45 votes

Vous pouvez également exécuter cette opération dans un cahier, afin de ne supprimer que (certains) avertissements dans un cahier spécifique.

63voto

lupuslupus Points 60

Je masque les avertissements dans les cases roses en exécutant le code suivant dans une cellule :

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

10voto

robert Points 189

La réponse acceptée ne fonctionne pas dans Jupyter (du moins lorsqu'on utilise certaines bibliothèques).

Les solutions Javascript présentées ici ne masquent que les avertissements qui s'affichent déjà, mais pas ceux qui s'afficheront à l'avenir.

Pour masquer/démasquer les avertissements dans Jupyter et JupyterLab, j'ai écrit le script suivant qui bascule essentiellement les css pour masquer/démasquer les avertissements.

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

1 votes

Je reçois l'erreur "Javescript Error : $ is not defined" (Erreur Javescript : $ n'est pas défini)

1 votes

Cela ne fonctionne pas non plus pour moi. J'obtiens la même erreur que Ben (j'utilise JupyterLab).

0 votes

Cela a fonctionné pour moi à la fois dans Jupyter et dans JupyterLab. Il y a peut-être un problème avec votre installation.

3voto

ottowg Points 21

Pour le laboratoire jupyter cela devrait fonctionner (@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>.''')

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X