2010-03-08 7 views

Trả lời

1

Bạn chỉ có một vấn đề khoảng trắng - nếu bạn sửa chữa nó, ví dụ như sau:

def foo(): 
    """ 
    >>> foo() 
    testfoo""" 

    def foo2(): 
    """ >>> 1/0 """ 
    print 'testfoo' 

    foo2() 

if __name__ == '__main__': 
    import doctest 
    doctest.testmod() 

bài kiểm tra chỉ cần vượt qua khỏe.

+0

Đây là lỗi đánh máy và làm xáo trộn ý định của tôi: Tôi muốn thử nghiệm __NOT__ để vượt qua .. Tôi muốn nhận được thông tin như "ZeroDivisionError: phân chia số nguyên hoặc modulo bằng 0" do chuỗi doctest trong foo2. Câu hỏi đặt ra là làm thế nào để doctest chương trình con. –

+0

Ah, tôi hiểu rồi. Tài liệu ** ** lồng nhau của hàm ** không hiển thị ở nơi đối tượng hàm (lồng nhau) không tồn tại - và trong mã của bạn, đối tượng hàm cho foo2 chỉ tồn tại trong khi thực hiện hàm foo bên ngoài. (Trong trường hợp nhà máy đóng cửa bình thường mà hàm bên ngoài * trả về * đối tượng hàm bên trong, thay vì chỉ sử dụng nó bên trong như một chi tiết thực hiện, bạn có nhiều tùy chọn hơn). Về cơ bản, nó ** phải ** là công việc của foo bằng cách nào đó bằng cách nào đó hiển thị các đoạn mã ẩn của foo2, bởi vì không ai khác có thể làm điều đó (foo2 không ** tồn tại ** cho bất kỳ ai khác! -). –

1

Cảm ơn. Tôi đã sợ rằng sẽ không có cách nào xung quanh mã bên ngoài docstring. Tuy nhiên tôi nghĩ rằng có thể có một mẹo để nhập khẩu người dân địa phương của một chức năng và do đó có được quyền truy cập vào các chức năng lồng nhau. Nhưng dù sao, một giải pháp sử dụng cách tiếp cận Alex' sẽ đọc

def foo(debug=False): 
    """ 
    >>> foo() 
    testfoo 
    >>> foo(debug=True) 
    """ 

    def foo2(): 
    """ 
     >>> 1/0""" 
    print 'testfoo' 


    if debug : 
    import doctest 
    for f in [foo2]: doctest.run_docstring_examples(f,locals()) 

    foo2() 

Bây giờ câu hỏi duy nhất là làm thế nào để tự động hóa các phương pháp này, vì vậy người ta có cái gì đó như

for f in locals().values(): doctest.run_docstring_examples(f,locals()) 

nhưng không có nhập khẩu và xây dựng trong các chức năng và các biến .