Mar*_*nix 16 warnings python-3.x jupyter-notebook
我在python 3 jupyter笔记本中得到了一些无用的警告.我想仅在特定单元格中关闭这些警告,而不是在ipynb文件的其余部分中.有人知道怎么做吗?
min*_*ins 12
解决方案:
通常不需要将效果扩展到整个单元格,因为这可能会隐藏一些其他有用的消息,因此使用上下文管理器来忽略警告:
with warnings.catch_warnings():
warnings.simplefilter('ignore')
# Your problematic instruction(s) here
Run Code Online (Sandbox Code Playgroud)
如果有充分的理由保护整个单元,那么只需通过插入捕获“魔法”来防止stderr流显示在单元输出区域中:
%%capture --no-stderr
Run Code Online (Sandbox Code Playgroud)
位于单元格顶部(而不是缩进所有行)。
说明:
最合乎逻辑的方法是在关键字引入的上下文管理器中插入触发警告的代码with
。它会在有问题的代码之前和之后关闭并恢复警告系统
Python 提供了这样的上下文管理器warnings.catch_warnings
:
上下文管理器复制并在退出时恢复警告过滤器和函数
showwarning()
。如果record
参数是False
(默认),上下文管理器将None
在输入时返回。如果record
是True
,则返回一个列表,该列表逐渐填充对象,如自定义showwarning()
函数所示(这也会抑制输出到sys.stdout
)。
您还需要注册一个过滤器以对上下文管理器捕获的每个警告做出反应,否则默认过滤器保持活动状态。
Python 提供了warnings.simplefilter
:
在警告过滤器规格列表中插入一个简单的条目
它注册一些操作(ignore
对于无操作、always
打印警告消息等,请参阅完整说明)。
例子:
import warnings, math
import numpy as np
# We want to compute the logs of this sequence.
# But log isn't defined for values <= 0
s = [-1, 5, 2, 0]
with warnings.catch_warnings():
warnings.simplefilter('ignore')
r = np.log(s)
print(r)
Run Code Online (Sandbox Code Playgroud)
通常我想保持标准输出打开打印,所以我发现这样使用catch_warnings
更好:
import warnings
def action_with_warnings():
warnings.warn("should not appear")
with warnings.catch_warnings(record=True):
action_with_warnings()
Run Code Online (Sandbox Code Playgroud)
它的缺点是将警告存储在内存中,但它通常不是一个显着的开销,值得简单化。即使在单个单元格中,我发现细粒度控制意味着我关心的警告不会被意外遗漏。
归档时间: |
|
查看次数: |
7876 次 |
最近记录: |