5

関数によって発生した警告の数をカウントする必要があるテストがいくつかあります。Python 2.6では、これは簡単です。

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

残念ながら、withPython 2.4では利用できないので、他に何を使用できますか?警告の数が多いため、(および/で警告フィルターを使用して)警告が1つだけ発生したかどうかを簡単に確認することはできませんaction='error'trycatch

4

2 に答える 2

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
于 2010-03-25T10:15:42.043 に答える
3

あなたができることはwarnings.catch_warnings()あなた自身の行動を複製することです。の現在の値をwarnings.showwarning保存し、警告をリストに保存する関数に置き換えます。次に、ルーチンの後にリストの長さをテストしてから、を復元しwarnings.showwarningます。

oldsw = warnings.showwarning
warnings.showwarning = myshowwarning
  ...
self.assertEquals(len(somewarninglist), 2)
warnings.showwarning = oldsw
于 2010-03-25T09:59:00.380 に答える