隐藏IPython中的所有警告

515

我需要制作一个IPython会话的屏幕录像,为了避免困惑观众,我希望禁用来自不同包的warnings.warn调用发出的所有警告。是否有一种方法可以配置 ipythonrc 文件以自动禁用所有此类警告?

5个回答

1229
地点:
import warnings
warnings.filterwarnings('ignore')

~/.ipython/profile_default/startup/disable-warnings.py中。

经常有时候需要看一次警告,这可以通过设置实现:

warnings.filterwarnings(action='once')

15
同样适用于IPython笔记本警告。不错的修复 :) - Keith Hughitt
7
@FrozenFlame,请将其更改回“默认值”。参见:https://docs.python.org/2/library/warnings.html - AZhao
48
您可以在笔记本中执行此操作,以便仅在一个特定的笔记本中禁止(某些)警告。 - Vasco
2
我遇到了一些奇怪的问题。我在 Kaggle 笔记本上工作,即使我在脚本开头设置了 warnings.filterwarnings('ignore'),我仍然会收到警告信息。这是否与我使用 TPU 加速器有关?TPU 在这种情况下有特殊的行为吗... 我很纳闷。我不明白。 - Catalina Chircu
1
请确保在代码开头调用! - SKPS
显示剩余3条评论

65

我通过在单元格中运行以下代码来隐藏粉色框中的警告:

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

14

已接受的答案在Jupyter中不起作用(至少在使用某些库时)。

这里的JavaScript解决方案仅隐藏已经显示但未来可能会显示的警告。

为了在Jupyter和JupyterLab中隐藏/显示警告,我编写了以下脚本,它基本上切换CSS以隐藏/显示警告。

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

2
我收到了错误信息:“Javescript 错误:$ 未定义”。 - Ben
1
我也无法使用。我遇到了和Ben一样的错误(我正在使用JupyterLab)。 - Tobias Bergkvist
它在Jupyter和JupyterLab中都对我有效,你的安装可能存在一些问题。 - Reza Keshavarz
对我来说可以运行,但这也会删除单元格中生成的任何其他输出。 - Akhil prasannan
只看官方选定的使用“warnings”的答案是不太可能有效的。 - Aleksandar Savkov

5

对于 JupyterLab,这应该可以工作(@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>.''')

0
你需要指定类别,否则即使使用上面的最佳解决方案,也会收到警告。
   warnings.filterwarnings("ignore", category=DeprecationWarning)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接