代码之家  ›  专栏  ›  技术社区  ›  l0b0

计算python 2.4中的警告数

  •  5
  • l0b0  · 技术社区  · 15 年前

    我有一些测试需要计算函数引发的警告数。在Python2.6中,使用

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

    不幸的是, with 在python 2.4中不可用,所以我还可以使用什么?我 不能 只需检查是否有单个警告(使用警告过滤器 action='error' try / catch ,因为警告的数量非常大。

    2 回复  |  直到 15 年前
        1
  •  6
  •   Pēteris Caune    15 年前

    我建议使用与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
    
        2
  •  3
  •   Ignacio Vazquez-Abrams    15 年前

    你能做的就是复制 warnings.catch_warnings() 你自己。保存的当前值 warnings.showwarning 并将其替换为一个将警告保存在列表中的函数,然后在例行测试之后测试列表的长度,然后恢复 警告。显示警告 .

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