在Python 2.4中计算警告

时间:2010-02-24 09:17:01

标签: python warnings python-2.4

我有一些测试需要计算函数引发的警告数。在Python 2.6中,这很简单,使用

with warnings.catch_warnings(record=True) as warn:
    ...
    self.assertEquals(len(warn), 2)

不幸的是,{2.4}中没有with,所以我还能使用什么呢?我无法只是检查是否有单一警告(使用action='error'try / catch的警告过滤器),因为警告数量很大

2 个答案:

答案 0 :(得分:6)

我打算提出与Ignacio相同的解决方法,这是一个更完整的测试代码示例:

import warnings

def setup_warning_catcher():
    """ Wrap warnings.showwarning with code that records warnings. """


    caught_warnings = []
    original_showwarning = warnings.showwarning

    def custom_showwarning(*args,  **kwargs):
        caught_warnings.append(args[0])
        return original_showwarning(*args, **kwargs)

    warnings.showwarning = custom_showwarning
    return caught_warnings


caught_warnings_list = setup_warning_catcher()

# trigger warning here

assert len(caught_warnings_list) == 1

答案 1 :(得分:3)

您可以做的是自己复制warnings.catch_warnings()的行为。保存当前值warnings.showwarning并将其替换为将警告保存在列表中的函数,然后在例程测试列表长度后再恢复warnings.showwarning

oldsw = warnings.showwarning
warnings.showwarning = myshowwarning
  ...
self.assertEquals(len(somewarninglist), 2)
warnings.showwarning = oldsw