Python警告始终显示而不是一次

时间:2016-02-18 15:44:44

标签: python warnings deprecated deprecation-warning

我尝试使用warnings.simplefilter来显示我的警告一次。我已经为DeprecationWarning创建了一个子类。我尝试将simplefilter放在与我的警告相同的模块中,并且在包级别init中尽可能地将其放在顶部,但它始终会在每次调用时显示警告。在python 3.4中测试。

我的警告:

class MyDeprecationWarning(DeprecationWarning):
    pass

我如何调用simplefilter:

warnings.simplefilter('once', MyDeprecationWarning)

我如何打电话警告:

warnings.warn("Warning!", MyDeprecationWarning)

问题是什么?

1 个答案:

答案 0 :(得分:1)

如果您的程序多次运行或某些代码在单独的进程中运行,您可能没有按正确的顺序发出命令。以下程序按预期工作。

import warnings


class MyDeprecationWarning(DeprecationWarning):
    pass


def main():
    print('Program Starting')
    warnings.simplefilter('once', MyDeprecationWarning)
    for _ in range(100):
        warnings.warn('Warning!', MyDeprecationWarning)
    print('Program Finished')


if __name__ == '__main__':
    main()