在ipython中隐藏所有警告


299

我需要制作一个ipython会话的屏幕录像,并且为了避免混淆观众,我想禁用warnings.warn来自不同包的调用所发出的所有警告。有没有一种方法可以将ipythonrc文件配置为自动禁用所有此类警告?


3
请注意何时可以接受答案,然后再检查其他问题,看是否有可接受的答案。
Dan D.

Answers:


715

我最终想通了。地点:

import warnings
warnings.filterwarnings('ignore')

里面~/.ipython/profile_default/startup/disable-warnings.py。如果有其他人遇到同一问题,我将保留此问题和答案以供记录。

经常看到一次警告很有用。可以通过以下方式设置:

warnings.filterwarnings(action='once')

8
也适用于IPython笔记本警告。不错的解决方法:)
Keith Hughitt

6
@FrozenFlame,您将其更改回“默认”设置,请参见:docs.python.org/2/library/warnings.html
2015年

36
您也可以在笔记本中执行此操作,以便仅抑制一个特定笔记本中的(某些)警告
Vasco 2015年

我发生了一些奇怪的事情,我在Kaggle笔记本上工作,即使我warnings.filterwarnings('ignore')在脚本的开头进行设置,仍然会收到警告。是否与我使用TPU加速器这一事实有关,在这种情况下TPU是否具有特定的行为……我想知道。我不明白。
卡塔琳娜·奇尔库

57

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

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
尽管投票否决,但仍认为这是一个有用的提示,因为与公认的答案相比,它更容易切换。
matthiash

我喜欢这个解决方案。我保存在一个外部模块中并添加到导入中。
亚当

3
这不再适用于jupyter实验室(尽管它将很酷:)
Ajasja,

1
有效 !接受的答案对我没有帮助。谢谢@matthiash
Gonzalo Garcia

4

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

我收到错误“ Javescript错误:未定义$”
Ben

@Ben您在浏览器中使用jupyter吗?VSCode中的笔记本无法加载$(jQuery)
罗伯特

是的,我做的(谷歌浏览器)

奇迹般有效!谢谢!
道格拉斯·戴利

也不适合我。我遇到了与Ben相同的错误(我正在使用JupyterLab)。
Tobias Bergkvist

2

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.