首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用换行符过滤第三方Python警告

使用换行符过滤第三方Python警告
EN

Stack Overflow用户
提问于 2021-07-05 15:09:09
回答 1查看 121关注 0票数 0

我正在尝试使用环境变量抑制来自第三方模块(在本例中是通过Pandas的PyTables )发出的警告。警告以换行符开头。

警告示例:

代码语言:javascript
运行
复制
python -c 'import pandas as pd; pd.DataFrame([None]).to_hdf("test.h5", "/data")'
/usr/lib/python3.9/site-packages/pandas/core/generic.py:2606: PerformanceWarning: 
your performance may suffer as PyTables will pickle object types that it cannot
map directly to c-types [inferred_type->mixed,key->block0_values] [items->Int64Index([0], dtype='int64')]

  pytables.to_hdf(

根据Python文档,我可以通过在action:message:category:module:line格式中设置PYTHONWARNINGS来指定要忽略的警告

使用category

我尝试了PYTHONWARNINGS=ignore::PerformanceWarning,但是它给出了消息Invalid -W option ignored: unknown warning category: 'PerformanceWarning'

PYTHONWARNINGS=ignore::pytables.PerformanceWarning给了我Invalid -W option ignored: invalid module name: 'pytables'

使用message

我最初尝试了PYTHONWARNINGS=ignore:your performance may suffer,它什么也不做,可能是因为以换行符开头的警告消息。

进一步研究换行符的情况,我尝试插入一个换行符,但它要么被转义,要么被删除:

代码语言:javascript
运行
复制
PYTHONWARNINGS="ignore:\nyour performance" python -c "import warnings as w; [print(f) for f in w.filters]"
('ignore', re.compile('\\\\nyour\\ performance', re.IGNORECASE), <class 'Warning'>, None, 0)
// ...
代码语言:javascript
运行
复制
PYTHONWARNINGS="$(echo -n "ignore:\nyour performance")" python -c "import warnings as w; [print(f) for f in w.filters]"
('ignore', re.compile('your\\ performance', re.IGNORECASE), <class 'Warning'>, None, 0)
// ...
代码语言:javascript
运行
复制
PYTHONWARNINGS="ignore:.your performance" python -c "import warnings as w; [print(f) for f in w.filters]"
('ignore', re.compile('\\.your\\ performance', re.IGNORECASE), <class 'Warning'>, None, 0)
// ...

如何禁用此警告?

(我知道我可以使用像python -c 'import pandas as pd; import warnings as w; w.filterwarnings("ignore", "\nyour performance"); pd.DataFrame([None]).to_hdf("test.h5", "/data")'这样的东西来做这件事,但是它对我的用例来说非常不方便。我也可以解决潜在的问题,但这不是一个小任务)

EN

回答 1

Stack Overflow用户

发布于 2021-07-06 19:36:17

出现问题的原因是PerformanceWarning不是内置的警告类别(list here)。

根据您的用例,您可以使用下面的方法,但要小心,因为一些笨拙的方法可能会抑制有用的警告。

如果要在从命令行运行脚本时忽略所有警告,可以使用:

代码语言:javascript
运行
复制
python -W ignore myscript.py

您的示例:

代码语言:javascript
运行
复制
python -W ignore -c 'import pandas as pd; pd.DataFrame([None]).to_hdf("test.h5", "/data")'

在脚本内部,您可以使用:

代码语言:javascript
运行
复制
import pandas as pd
import warnings

# Create your own warning filter
warnings.simplefilter(action='ignore', category=pd.errors.PerformanceWarning)

您的示例:

代码语言:javascript
运行
复制
python -c 'import warnings; import pandas as pd; warnings.simplefilter(action='ignore', category=pd.errors.PerformanceWarning); pd.DataFrame([None]).to_hdf("test.h5", "/data")'

我建议使用第二种方法的一些变体,其中显式忽略您不想看到的特定警告。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68251969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档