2011-11-14 36 views
5

Giả sử tôi đã sau:doctest cho docstring lồng nhau

def foo(s): 
    """A dummy function foo. For example: 

>>> a = '''This is a test string line 1 
This is a test string line 2 
This is a test string line 3''' 
>>> foo(a) 
This is a test string line 1 
This is a test string line 2 
This is a test string line 3 
>>> 
    """ 
    print s 

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

Và chúng ta hãy lưu nó như foo.py. Khi tôi chạy:

C:\Python27>python.exe foo.py 
********************************************************************** 
File "foo.py", line 5, in __main__.foo 
Failed example: 
    a = '''This is a test string line 1 
Exception raised: 
    Traceback (most recent call last): 
     File "C:\Python27\lib\doctest.py", line 1254, in __run 
     compileflags, 1) in test.globs 
     File "<doctest __main__.foo[0]>", line 1 
     a = '''This is a test string line 1 
             ^
    SyntaxError: EOF while scanning triple-quoted string literal 
********************************************************************** 
File "foo.py", line 8, in __main__.foo 
Failed example: 
    foo(a) 
Exception raised: 
    Traceback (most recent call last): 
     File "C:\Python27\lib\doctest.py", line 1254, in __run 
     compileflags, 1) in test.globs 
     File "<doctest __main__.foo[1]>", line 1, in <module> 
     foo(a) 
    NameError: name 'a' is not defined 
********************************************************************** 
1 items had failures: 
    2 of 2 in __main__.foo 
***Test Failed*** 2 failures. 

đã thử indent docstring (>>> a = '' '... ''' đã kiểm tra tất cả các indents - 4 không gian cho mỗi thụt lề.) Và thay đổi giá duy nhất để báo giá gấp đôi (>>> a = "" "...." ""), các lỗi khác nhau và doctest sẽ không thành công. Hiện tại, công việc duy nhất là nối tất cả các dòng vào một chuỗi dài cực và tách biệt với '\ r \ n'.

Tôi có bỏ lỡ điều gì đó không?

Trả lời

9

Tôi nghĩ rằng bạn cần phải đặt một số dấu chấm có

>>> a = """This is a test string line 1 
... This is a test string line 2 
... This is a test string line 3""" 
+0

mặc dù tôi có thể không ngón tay cái lên (bắt buộc 15 danh tiếng), cảm ơn vì câu trả lời của bạn. Câu trả lời của bạn hoạt động hoàn hảo. – user1045217

+1

Tôi chỉ muốn đề cập rằng ** doctest ** cần được trích dẫn với dấu ngoặc kép * double *. Câu trả lời có ** docstring ** được trích dẫn * đơn * trích dẫn. Tôi đã trích dẫn doctest của tôi trong báo giá duy nhất, và tôi không thể hiểu tại sao nó không hoạt động. – Forethinker

+0

@Forethinker: cảm ơn! BTW, trang web này được cộng tác chỉnh sửa, khi bạn nhìn thấy một sai lầm rõ ràng, hãy chỉnh sửa bài đăng và sửa nó. – georg