508

I need to produce a screencast of an IPython session, and to avoid confusing viewers, I want to disable all warnings emitted by warnings.warn calls from different packages. Is there a way to configure the ipythonrc file to automatically disable all such warnings?

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
astrofrog
  • 32,883
  • 32
  • 90
  • 131

5 Answers5

1219

Place:

import warnings
warnings.filterwarnings('ignore')

inside ~/.ipython/profile_default/startup/disable-warnings.py.

Quite often it is useful to see a warning once. This can be set by:

warnings.filterwarnings(action='once')
Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
astrofrog
  • 32,883
  • 32
  • 90
  • 131
65

I hide the warnings in the pink boxes by running the following code in a cell:

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
  • 3,105
  • 3
  • 23
  • 34
14

The accepted answer does not work in Jupyter (at least when using some libraries).

The JavaScript solutions here only hide warnings that are already showing but not warnings that would be shown in the future.

To hide/unhide warnings in Jupyter and JupyterLab I wrote the following script that essentially toggles CSS to hide/unhide warnings.

%%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);
Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
robert
  • 978
  • 7
  • 17
5

For JupyterLab, this should work (@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>.''')
Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
ottowg
  • 51
  • 1
  • 1
0

you need to specify the category otherwise even with the top solution above you'd get warnings

   warnings.filterwarnings("ignore", category=DeprecationWarning)