2013-07-16 58 views
6

Tôi đã xác định một lớp ngoại lệ SpamException trong mô-đun spam. Bây giờ tôi muốn thử nghiệm hàm spam_function, điều này làm tăng ngoại lệ này. Vì vậy, tôi đã viết doctest sau.Cách kiểm tra ngoại lệ với doctest bằng Python 2.x và 3.x?

>>> spam_function() 
Traceback (most recent call last): 
    .... 
SpamException 

Thử nghiệm thành công trên Python 2.x, nhưng trên thử nghiệm Python 3.x không thành công. Bài kiểm tra sau hoạt động trên Python 3.x.

>>> spam_function() 
Traceback (most recent call last): 
    .... 
spam.SpamException 

Sự khác biệt đáng chú ý ở đây là bao gồm tên mô-đun trong tên ngoại lệ. Vậy làm thế nào tôi có thể viết một doctest hoạt động trên cả Python 2.x và 3.x?

Trả lời

4

tôi sẽ bật chỉ doctest.IGNORE_EXCEPTION_DETAIL, như thế này:

>>> spam_function() # doctest: +IGNORE_EXCEPTION_DETAIL 
Traceback (most recent call last) 
    ... 
SpamException: 'lovely spam' 

Nhưng lưu ý rằng IGNORE_EXCEPTION_DETAIL không hoạt động cho các đối tượng ngoại lệ đơn giản (không có đối số liên quan). Cụ thể, ví dụ sau không thể chuyển sang Python 3, vì không có gì sau tên ngoại lệ:

>>> spam_function() # doctest: +IGNORE_EXCEPTION_DETAIL 
Traceback (most recent call last) 
    ... 
SpamException 
+0

Tôi không nhận thấy bất kỳ thay đổi nào khi thêm '# doctest: + IGNORE_EXCEPTION_DETAIL', tức là nó không bị lỗi Phiên bản Python. Bạn có thể thêm một ví dụ hoàn chỉnh? –

+0

'IGNORE_EXCEPTION_DETAIL' hoạt động ngay khi lớp ngoại lệ được đề cập có phương thức' __str__' trả về một chuỗi không trống. Sau đó và chỉ sau đó dòng ngoại lệ cuối cùng có dấu hai chấm, đó là bắt buộc để chỉ thị hoạt động. –

+0

Dường như IGNORE_EXCEPTION_DETAIL cũng bỏ qua thông báo ngoại lệ, loại bỏ một phần lớn mục đích của việc xử lý các hành vi này. Nhưng loại ngoại lệ vẫn được chọn. ouf! – vaab

Các vấn đề liên quan