2010-02-24 14 views
5

Tôi đã có một số thử nghiệm cần đếm số cảnh báo do hàm thực hiện. Trong Python 2.6 này là đơn giản, sử dụngĐếm cảnh báo bằng Python 2.4

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

Thật không may, with không có sẵn trong Python 2.4, vì vậy tôi có thể sử dụng những gì khác? Tôi không thể chỉ cần kiểm tra xem có cảnh báo nào không (sử dụng bộ lọc cảnh báo với action='error'try/catch), vì số lượng cảnh báo là đáng kể.

Trả lời

6

tôi sẽ đề nghị cách giải quyết tương tự như Ignacio, ví dụ hoàn chỉnh hơn một chút mã kiểm tra:

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 
3

Việc bạn có thể làm là nhân bản hành vi của chính mình là warnings.catch_warnings(). Lưu giá trị hiện tại của warnings.showwarning và thay thế bằng chức năng lưu cảnh báo trong danh sách, sau đó sau khi kiểm tra thường xuyên độ dài của danh sách và sau đó khôi phục warnings.showwarning.

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