5

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

我的警告:

class MyDeprecationWarning(DeprecationWarning):
    pass

我如何称呼 simplefilter:

warnings.simplefilter('once', MyDeprecationWarning)

我怎么称呼警告:

warnings.warn("Warning!", MyDeprecationWarning)

有什么问题?

4

1 回答 1

2

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

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()
于 2016-02-18T16:43:28.707 回答