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?

astrofrog
la source
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')
astrofrog
la source
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>.''')
matthiash
la source
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);
robert
la source
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>.''')
ottowg
la source
2

Cela fonctionne à chaque fois -

import warnings
warnings.filterwarnings('ignore')
Rahul Bordoloi
la source