Masquer tous les avertissements dans ipython


300

J'ai besoin de produire un screencast d'une session ipython, et pour éviter de dérouter les téléspectateurs, je veux désactiver tous les avertissements émis par les warnings.warnappels de différents packages. Existe-t-il un moyen de configurer le fichier ipythonrc pour désactiver automatiquement tous ces avertissements?


3
notez quand vous le pouvez vous devez accepter votre réponse, puis allez vérifier vos autres questions et voir si elles ont des réponses acceptables.
Dan D.

Réponses:


716

Je l'ai finalement compris. Endroit:

import warnings
warnings.filterwarnings('ignore')

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

Assez souvent, il est utile de voir un avertissement une fois. Cela peut être défini par:

warnings.filterwarnings(action='once')

8
Fonctionne également pour les avertissements de bloc-notes IPython. Belle solution :)
Keith Hughitt

6
@FrozenFlame, vous le redéfinissez sur 'default' Voir: docs.python.org/2/library/warnings.html
AZhao

36
Vous pouvez également l'exécuter dans un cahier, afin de supprimer uniquement (certains) avertissements dans un cahier spécifique
Vasco

Quelque chose d'étrange m'arrive, je travaille sur le cahier Kaggle, et même si je mets warnings.filterwarnings('ignore')au début de mon script, je reçois quand même des avertissements. Si cela est lié au fait que j'utilise l'accélérateur TPU, le TPU a-t-il un comportement particulier dans ce cas ... Je me demande. Je ne comprends pas.
Catalina Chircu

57

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

2
Malgré le downvote, croyez toujours que c'était un conseil utile, car il est plus facile de basculer par rapport à la réponse acceptée.
matthiash

J'adore cette solution. J'ai enregistré dans un module externe et ajouté aux importations.
Adam

3
Cela ne fonctionne plus avec le laboratoire jupyter (bien que ce serait cool si c'était le cas :)
Ajasja

1
Ça a marché ! la réponse acceptée ne m'a pas aidé. Merci @matthiash
Gonzalo Garcia

4

La réponse acceptée ne fonctionne pas dans Jupyter (au moins lors de l'utilisation de certaines bibliothèques).

Les solutions Javascript ici masquent uniquement les avertissements qui s'affichent déjà, mais pas les avertissements qui s'afficheront à l'avenir.

Pour masquer / afficher les avertissements dans Jupyter et JupyterLab, j'ai écrit le script suivant qui bascule essentiellement css pour masquer / afficher 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);

Je reçois l'erreur "Erreur Javescript: $ n'est pas défini"
Ben

@Ben utilisez-vous jupyter dans le navigateur? Les ordinateurs portables dans VSCode ne chargent pas $ (jQuery)
robert

Oui, je le fais (Google Chrome)
Ben

Fonctionne comme un charme! Je vous remercie!
Douglas Daly

Ça ne marche pas non plus pour moi. J'obtiens la même erreur que Ben (j'utilise JupyterLab).
Tobias Bergkvist

2

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

2

Cela fonctionne à chaque fois -

import warnings
warnings.filterwarnings('ignore')
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.