在IPython中隐藏所有警告

我需要生成一个IPython会话的屏幕录制,为了避免混淆观众,我想禁用来自不同包的warnings.warn调用发出的所有警告。有没有办法配置ipythonrc文件来自动禁用所有此类警告?

661622 次浏览

的地方:

import warnings
warnings.filterwarnings('ignore')

~/.ipython/profile_default/startup/disable-warnings.py内部。

通常情况下,只查看一次警告是很有用的。可以通过以下方法设置:

warnings.filterwarnings(action='once')

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

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

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

接受的答案在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);