【问题标题】:How to suppress ITK warning messages in python如何在python中抑制ITK警告消息
【发布时间】:2021-10-20 01:03:18
【问题描述】:

每当我使用 python medpy.io 加载函数加载 .img.gz 文件时,我都会收到如下警告消息:

警告:在 /usr/share/miniconda/envs/bld/conda-bld/simpleitk_1598369168428/work/build/ITK/Modules/IO/NIFTI/src/itkNiftiImageIO.cxx,第 1009 行 NiftiImageIO (0x56268f287910): /data/temp.img.gz 是分析文件,它已被弃用

有什么方法可以抑制警告信息吗? 我尝试使用导入日志库并设置 logging.disable(sys.maxsize) & 导入警告并设置 warnings.simplefilter("ignore", category=PendingDeprecationWarning)

这两种方法都不适合我。

【问题讨论】:

    标签: python itk


    【解决方案1】:

    如果不指定类别怎么办?

    我会根据具体情况这样做,以免影响整个 python 文件。

    import warnings
    
    with warnings.catch_warnings():
        warnings.simplefilter("ignore")
        # do whatever after this
        
    

    更新:这可能是 C++ 端发出警告而不是 python 的问题。您必须深入研究 C++ 才能抓住它。 https://github.com/InsightSoftwareConsortium/ITK/blob/34231b57021418fdb6afd4fcf5082a73b12969ed/Modules/IO/NIFTI/src/itkNiftiImageIO.cxx#L1009再看itkWarningMacrohttps://itk.org/Doxygen318/html/itkMacro_8h.html#a0c47033c6ca9aae1319b1793f4419ada

    【讨论】:

    • 我试图访问itkNiftiImageIO.cxx,但我找不到它。它说 miniconda 文件夹不存在。
    • 抱歉,我说的不准确。如果更改 C++ 源代码,则需要重新编译 python 模块。但你可能不应该那样做。我之前想说的是,你需要了解 C++ 是如何记录它的,itkWarningMacro 做了什么,这样你就有机会用 Python 捕获它。您也可以查看 NIFTI github 页面以创建问题或搜索解决方案。
    【解决方案2】:

    ITK 警告消息显示可以通过itk.ProcessObject.SetGlobalWarningDisplay 全局切换。所以你想要

    itk.ProcessObject.SetGlobalWarningDisplay(False)
    

    参见静态函数itk::Object::SetGlobalWarningDisplayC++ docs here.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-09
      • 2012-06-20
      • 1970-01-01
      • 2021-07-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多