Hướng dẫn doctest python - con trăn

Mô -đun

python -m doctest -v example.py
4 tìm kiếm các đoạn văn bản trông giống như các phiên Python tương tác, và sau đó thực hiện các phiên đó để xác minh rằng chúng hoạt động chính xác như được hiển thị. Có một số cách phổ biến để sử dụng DocTest:

  • Để kiểm tra xem một tài liệu mô-đun có được cập nhật bằng cách xác minh rằng tất cả các ví dụ tương tác vẫn hoạt động như được ghi lại không.

  • Để thực hiện kiểm tra hồi quy bằng cách xác minh rằng các ví dụ tương tác từ tệp kiểm tra hoặc đối tượng kiểm tra hoạt động như mong đợi.

  • Để viết tài liệu hướng dẫn cho một gói, được minh họa một cách tự do với các ví dụ đầu vào-đầu ra. Tùy thuộc vào việc các ví dụ hay văn bản lưu trữ được nhấn mạnh, điều này có hương vị của việc thử nghiệm biết chữ của Hồi giáo hay tài liệu thực thi.

Ở đây, một mô -đun ví dụ hoàn chỉnh nhưng nhỏ:

"""
This is the "example" module.

The example module supplies one function, factorial().  For example,

>>> factorial(5)
120
"""

def factorial(n):
    """Return the factorial of n, an exact integer >= 0.

    If the result is small enough to fit in an int, return an int.
    Else return a long.

    >>> [factorial(n) for n in range(6)]
    [1, 1, 2, 6, 24, 120]
    >>> [factorial(long(n)) for n in range(6)]
    [1, 1, 2, 6, 24, 120]
    >>> factorial(30)
    265252859812191058636308480000000L
    >>> factorial(30L)
    265252859812191058636308480000000L
    >>> factorial(-1)
    Traceback (most recent call last):
        ...
    ValueError: n must be >= 0

    Factorials of floats are OK, but the float must be an exact integer:
    >>> factorial(30.1)
    Traceback (most recent call last):
        ...
    ValueError: n must be exact integer
    >>> factorial(30.0)
    265252859812191058636308480000000L

    It must also not be ridiculously large:
    >>> factorial(1e100)
    Traceback (most recent call last):
        ...
    OverflowError: n too large
    """

    import math
    if not n >= 0:
        raise ValueError("n must be >= 0")
    if math.floor(n) != n:
        raise ValueError("n must be exact integer")
    if n+1 == n:  # catch a value like 1e300
        raise OverflowError("n too large")
    result = 1
    factor = 2
    while factor <= n:
        result *= factor
        factor += 1
    return result


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

Nếu bạn chạy

python -m doctest -v example.py
5 trực tiếp từ dòng lệnh,
python -m doctest -v example.py
4 hoạt động phép thuật của nó:

Không có đầu ra! Điều đó bình thường, và nó có nghĩa là tất cả các ví dụ đã hoạt động. Chuyển

python -m doctest -v example.py
7 cho tập lệnh và
python -m doctest -v example.py
4 in một bản ghi chi tiết về những gì nó cố gắng và in một bản tóm tắt ở cuối:

$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok

Và như vậy, cuối cùng kết thúc với:

Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$

Đó là tất cả những gì bạn cần biết để bắt đầu sử dụng hiệu quả

python -m doctest -v example.py
4! Nhảy vào. Các phần sau đây cung cấp chi tiết đầy đủ. Lưu ý rằng có nhiều ví dụ về tài liệu trong bộ thử nghiệm Python và thư viện tiêu chuẩn. Đặc biệt các ví dụ hữu ích có thể được tìm thấy trong tệp thử nghiệm tiêu chuẩn
import doctest
doctest.testfile("example.txt")
0.

25.2.1. Sử dụng đơn giản: Kiểm tra các ví dụ trong Docstrings¶Simple Usage: Checking Examples in Docstrings¶

Cách đơn giản nhất để bắt đầu sử dụng DocTest (nhưng không nhất thiết là cách bạn sẽ tiếp tục làm điều đó) là kết thúc mỗi mô -đun

import doctest
doctest.testfile("example.txt")
1 với:

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

python -m doctest -v example.py
4 sau đó kiểm tra các tài liệu trong mô -đun
import doctest
doctest.testfile("example.txt")
1.

Chạy mô -đun dưới dạng tập lệnh khiến các ví dụ trong DocStrings được thực thi và xác minh:

Điều này sẽ không hiển thị bất cứ điều gì trừ khi một ví dụ không thành công, trong trường hợp đó, ví dụ thất bại và (các) nguyên nhân của (các) lỗi được in thành stdout và dòng đầu ra cuối cùng là

import doctest
doctest.testfile("example.txt")
4, trong đó n là Số lượng ví dụ thất bại.

Thay vào đó, hãy chạy nó với công tắc

python -m doctest -v example.py
7:

và một báo cáo chi tiết về tất cả các ví dụ đã thử được in ra đầu ra tiêu chuẩn, cùng với các bản tóm tắt các loại ở cuối.

Bạn có thể buộc chế độ dài dòng bằng cách chuyển

import doctest
doctest.testfile("example.txt")
6 đến
import doctest
doctest.testfile("example.txt")
7 hoặc cấm nó bằng cách vượt qua
import doctest
doctest.testfile("example.txt")
8. Trong một trong những trường hợp đó,
import doctest
doctest.testfile("example.txt")
9 không được kiểm tra bởi
import doctest
doctest.testfile("example.txt")
7 (vì vậy việc vượt qua
python -m doctest -v example.py
7 hoặc không có tác dụng).

Kể từ Python 2.6, cũng có một phím tắt dòng lệnh để chạy

import doctest
doctest.testfile("example.txt")
7. Bạn có thể hướng dẫn trình thông dịch Python chạy mô -đun tài liệu trực tiếp từ thư viện tiêu chuẩn và chuyển (các) tên mô -đun trên dòng lệnh:

python -m doctest -v example.py

Điều này sẽ nhập

python -m doctest -v example.py
5 dưới dạng mô -đun độc lập và chạy
import doctest
doctest.testfile("example.txt")
7 trên đó. Lưu ý rằng điều này có thể không hoạt động chính xác nếu tệp là một phần của gói và nhập các mô hình con khác từ gói đó.

Để biết thêm thông tin về

import doctest
doctest.testfile("example.txt")
7, xem phần API cơ bản.Basic API.

25.2.2. Cách sử dụng đơn giản: Kiểm tra các ví dụ trong tệp văn bảnSimple Usage: Checking Examples in a Text File¶

Một ứng dụng đơn giản khác của DocTest là kiểm tra các ví dụ tương tác trong một tệp văn bản. Điều này có thể được thực hiện với chức năng

The ``example`` module
======================

Using ``factorial``
-------------------

This is an example text file in reStructuredText format.  First import
``factorial`` from the ``example`` module:

    >>> from example import factorial

Now use it:

    >>> factorial(6)
    120
6:

import doctest
doctest.testfile("example.txt")

Kịch bản ngắn đó thực thi và xác minh bất kỳ ví dụ Python tương tác nào có trong tệp

The ``example`` module
======================

Using ``factorial``
-------------------

This is an example text file in reStructuredText format.  First import
``factorial`` from the ``example`` module:

    >>> from example import factorial

Now use it:

    >>> factorial(6)
    120
7. Nội dung tệp được xử lý như thể nó là một tài liệu khổng lồ duy nhất; Các tập tin không cần phải chứa một chương trình Python! Ví dụ, có lẽ
The ``example`` module
======================

Using ``factorial``
-------------------

This is an example text file in reStructuredText format.  First import
``factorial`` from the ``example`` module:

    >>> from example import factorial

Now use it:

    >>> factorial(6)
    120
7 chứa điều này:

The ``example`` module
======================

Using ``factorial``
-------------------

This is an example text file in reStructuredText format.  First import
``factorial`` from the ``example`` module:

    >>> from example import factorial

Now use it:

    >>> factorial(6)
    120

Chạy

The ``example`` module
======================

Using ``factorial``
-------------------

This is an example text file in reStructuredText format.  First import
``factorial`` from the ``example`` module:

    >>> from example import factorial

Now use it:

    >>> factorial(6)
    120
9 sau đó tìm thấy lỗi trong tài liệu này:

File "./example.txt", line 14, in example.txt
Failed example:
    factorial(6)
Expected:
    120
Got:
    720

Như với

import doctest
doctest.testfile("example.txt")
7,
The ``example`` module
======================

Using ``factorial``
-------------------

This is an example text file in reStructuredText format.  First import
``factorial`` from the ``example`` module:

    >>> from example import factorial

Now use it:

    >>> factorial(6)
    120
6 đã giành được bất cứ thứ gì trừ khi một ví dụ thất bại. Nếu một ví dụ không thành công, thì ví dụ thất bại và (các) nguyên nhân của (các) lỗi được in thành stdout, sử dụng cùng định dạng với
import doctest
doctest.testfile("example.txt")
7.

Theo mặc định,

The ``example`` module
======================

Using ``factorial``
-------------------

This is an example text file in reStructuredText format.  First import
``factorial`` from the ``example`` module:

    >>> from example import factorial

Now use it:

    >>> factorial(6)
    120
6 tìm các tệp trong thư mục mô -đun gọi. Xem phần API cơ bản để biết mô tả về các đối số tùy chọn có thể được sử dụng để nói với nó để tìm các tệp ở các vị trí khác.Basic API for a description of the optional arguments that can be used to tell it to look for files in other locations.

Giống như

import doctest
doctest.testfile("example.txt")
7, ________ 66 Verbosity có thể được đặt với công tắc dòng lệnh
python -m doctest -v example.py
7 hoặc với dòng chảy đối số từ khóa tùy chọn.

Kể từ Python 2.6, cũng có một phím tắt dòng lệnh để chạy

The ``example`` module
======================

Using ``factorial``
-------------------

This is an example text file in reStructuredText format.  First import
``factorial`` from the ``example`` module:

    >>> from example import factorial

Now use it:

    >>> factorial(6)
    120
6. Bạn có thể hướng dẫn trình thông dịch Python chạy mô -đun tài liệu trực tiếp từ thư viện tiêu chuẩn và chuyển (các) tên tệp trên dòng lệnh:

python -m doctest -v example.txt

Bởi vì tên tệp không kết thúc bằng

File "./example.txt", line 14, in example.txt
Failed example:
    factorial(6)
Expected:
    120
Got:
    720
8,
python -m doctest -v example.py
4 thông tin rằng nó phải được chạy với
The ``example`` module
======================

Using ``factorial``
-------------------

This is an example text file in reStructuredText format.  First import
``factorial`` from the ``example`` module:

    >>> from example import factorial

Now use it:

    >>> factorial(6)
    120
6, không phải
import doctest
doctest.testfile("example.txt")
7.

Để biết thêm thông tin về

The ``example`` module
======================

Using ``factorial``
-------------------

This is an example text file in reStructuredText format.  First import
``factorial`` from the ``example`` module:

    >>> from example import factorial

Now use it:

    >>> factorial(6)
    120
6, xem phần API cơ bản.Basic API.

25.2.3. Làm thế nào nó hoạt động¶How It Works¶

Phần này kiểm tra chi tiết cách thức hoạt động của DocTest: nó xem xét các tài liệu nào, cách nó tìm thấy các ví dụ tương tác, bối cảnh thực thi nào nó sử dụng, cách nó xử lý các ngoại lệ và cách sử dụng cờ tùy chọn để kiểm soát hành vi của nó. Đây là thông tin mà bạn cần biết để viết các ví dụ về tài liệu; Để biết thông tin về thực sự chạy Doctest trên các ví dụ này, hãy xem các phần sau.

25.2.3.1. Docstrings nào được kiểm tra? ¶Which Docstrings Are Examined?¶

Mô -đun DocString, và tất cả các chức năng, lớp học và phương thức được tìm kiếm. Các đối tượng được nhập vào mô -đun không được tìm kiếm.

Ngoài ra, nếu

python -m doctest -v example.txt
3 tồn tại và là đúng, thì đó phải là một lệnh và mỗi mục nhập một tên (chuỗi) thành một đối tượng hàm, đối tượng lớp hoặc chuỗi. Chức năng và các tài liệu đối tượng lớp được tìm thấy từ
python -m doctest -v example.txt
3 được tìm kiếm và các chuỗi được đối xử như thể chúng là tài liệu. Trong đầu ra, khóa
python -m doctest -v example.txt
5 trong
python -m doctest -v example.txt
3 xuất hiện với tên

Bất kỳ lớp nào được tìm thấy đều được tìm kiếm đệ quy tương tự, để kiểm tra các tài liệu trong các phương pháp chứa và các lớp lồng nhau của chúng.

Thay đổi trong phiên bản 2.4: Một khái niệm tên riêng tư của người Viking không còn được ghi nhận và không còn được ghi lại.A “private name” concept is deprecated and no longer documented.

25.2.3.2. Các ví dụ DocString được công nhận như thế nào? ¶How are Docstring Examples Recognized?¶

Trong hầu hết các trường hợp, một bản sao của phiên giao diện điều khiển tương tác hoạt động tốt, nhưng Doctest không phải là cố gắng thực hiện mô phỏng chính xác của bất kỳ vỏ python cụ thể nào.

>>> # comments are ignored
>>> x = 12
>>> x
12
>>> if x == 13:
...     print "yes"
... else:
...     print "no"
...     print "NO"
...     print "NO!!!"
...
no
NO
NO!!!
>>>

Bất kỳ đầu ra dự kiến ​​nào cũng phải ngay lập tức theo dòng

python -m doctest -v example.txt
7 hoặc
python -m doctest -v example.txt
8 cuối cùng chứa mã và đầu ra dự kiến ​​(nếu có) mở rộng sang dòng
python -m doctest -v example.txt
7 hoặc tất cả không gian trắng tiếp theo.

Bản in tốt:

  • Đầu ra dự kiến ​​không thể chứa một dòng không gian trắng, vì một dòng như vậy được thực hiện để báo hiệu sự kết thúc của đầu ra dự kiến. Nếu đầu ra dự kiến ​​có chứa một dòng trống, hãy đặt

    >>> # comments are ignored
    >>> x = 12
    >>> x
    12
    >>> if x == 13:
    ...     print "yes"
    ... else:
    ...     print "no"
    ...     print "NO"
    ...     print "NO!!!"
    ...
    no
    NO
    NO!!!
    >>>
    
    0 vào ví dụ tài liệu của bạn, mỗi nơi một dòng trống được mong đợi.

    Mới trong phiên bản 2.4:

    >>> # comments are ignored
    >>> x = 12
    >>> x
    12
    >>> if x == 13:
    ...     print "yes"
    ... else:
    ...     print "no"
    ...     print "NO"
    ...     print "NO!!!"
    ...
    no
    NO
    NO!!!
    >>>
    
    0 đã được thêm vào; Không có cách nào để sử dụng đầu ra dự kiến ​​chứa các dòng trống trong các phiên bản trước.
    >>> # comments are ignored
    >>> x = 12
    >>> x
    12
    >>> if x == 13:
    ...     print "yes"
    ... else:
    ...     print "no"
    ...     print "NO"
    ...     print "NO!!!"
    ...
    no
    NO
    NO!!!
    >>>
    
    0 was added; there was no way to use expected output containing empty lines in previous versions.

  • Tất cả các ký tự tab cứng được mở rộng đến không gian, sử dụng các điểm dừng tab 8 cột. Các tab trong đầu ra được tạo bởi mã được kiểm tra không được sửa đổi. Bởi vì bất kỳ tab cứng nào trong đầu ra mẫu được mở rộng, điều này có nghĩa là nếu đầu ra mã bao gồm các tab cứng, cách duy nhất mà tài liệu nhất có thể vượt qua là nếu tùy chọn

    >>> # comments are ignored
    >>> x = 12
    >>> x
    12
    >>> if x == 13:
    ...     print "yes"
    ... else:
    ...     print "no"
    ...     print "NO"
    ...     print "NO!!!"
    ...
    no
    NO
    NO!!!
    >>>
    
    2 hoặc chỉ thị có hiệu lực. Ngoài ra, bài kiểm tra có thể được viết lại để nắm bắt đầu ra và so sánh nó với giá trị dự kiến ​​như là một phần của bài kiểm tra. Việc xử lý các tab trong nguồn này đã được đưa ra thông qua thử nghiệm và lỗi, và đã được chứng minh là cách dễ bị lỗi nhất để xử lý chúng. Có thể sử dụng một thuật toán khác để xử lý các tab bằng cách viết một lớp
    >>> # comments are ignored
    >>> x = 12
    >>> x
    12
    >>> if x == 13:
    ...     print "yes"
    ... else:
    ...     print "no"
    ...     print "NO"
    ...     print "NO!!!"
    ...
    no
    NO
    NO!!!
    >>>
    
    3 tùy chỉnh.directive is in effect. Alternatively, the test can be rewritten to capture the output and compare it to an expected value as part of the test. This handling of tabs in the source was arrived at through trial and error, and has proven to be the least error prone way of handling them. It is possible to use a different algorithm for handling tabs by writing a custom
    >>> # comments are ignored
    >>> x = 12
    >>> x
    12
    >>> if x == 13:
    ...     print "yes"
    ... else:
    ...     print "no"
    ...     print "NO"
    ...     print "NO!!!"
    ...
    no
    NO
    NO!!!
    >>>
    
    3 class.

    Thay đổi trong phiên bản 2.4: Mở rộng các tab sang không gian là mới; Các phiên bản trước đã cố gắng bảo tồn các tab cứng, với kết quả khó hiểu.Expanding tabs to spaces is new; previous versions tried to preserve hard tabs, with confusing results.

  • Đầu ra vào stdout được ghi lại, nhưng không phải đầu ra cho stderr (các dấu vết ngoại lệ được ghi lại thông qua một phương tiện khác).

  • Nếu bạn tiếp tục một dòng thông qua việc đánh dấu lại trong một phiên tương tác hoặc vì bất kỳ lý do nào khác, hãy sử dụng dấu gạch chéo ngược, bạn nên sử dụng một tài liệu thô, sẽ bảo tồn các dấu gạch chéo ngược của bạn chính xác khi bạn gõ chúng:

    $ python example.py -v
    Trying:
        factorial(5)
    Expecting:
        120
    ok
    Trying:
        [factorial(n) for n in range(6)]
    Expecting:
        [1, 1, 2, 6, 24, 120]
    ok
    Trying:
        [factorial(long(n)) for n in range(6)]
    Expecting:
        [1, 1, 2, 6, 24, 120]
    ok
    
    0

    Nếu không, dấu gạch chéo ngược sẽ được hiểu là một phần của chuỗi. Ví dụ,

    >>> # comments are ignored
    >>> x = 12
    >>> x
    12
    >>> if x == 13:
    ...     print "yes"
    ... else:
    ...     print "no"
    ...     print "NO"
    ...     print "NO!!!"
    ...
    no
    NO
    NO!!!
    >>>
    
    4 ở trên sẽ được hiểu là một nhân vật mới. Ngoài ra, bạn có thể nhân đôi từng dấu gạch chéo ngược trong phiên bản DocTest (và không sử dụng chuỗi RAW):

    $ python example.py -v
    Trying:
        factorial(5)
    Expecting:
        120
    ok
    Trying:
        [factorial(n) for n in range(6)]
    Expecting:
        [1, 1, 2, 6, 24, 120]
    ok
    Trying:
        [factorial(long(n)) for n in range(6)]
    Expecting:
        [1, 1, 2, 6, 24, 120]
    ok
    
    1

  • Cột bắt đầu không quan trọng:

    $ python example.py -v
    Trying:
        factorial(5)
    Expecting:
        120
    ok
    Trying:
        [factorial(n) for n in range(6)]
    Expecting:
        [1, 1, 2, 6, 24, 120]
    ok
    Trying:
        [factorial(long(n)) for n in range(6)]
    Expecting:
        [1, 1, 2, 6, 24, 120]
    ok
    
    2

    và khi nhiều ký tự khoảng trắng hàng đầu bị tước khỏi đầu ra dự kiến ​​như xuất hiện trong dòng

    python -m doctest -v example.txt
    
    7 ban đầu bắt đầu ví dụ.

25.2.3.3. Những gì bối cảnh thực hiện? ¶What’s the Execution Context?¶

Theo mặc định, mỗi lần

python -m doctest -v example.py
4 đều tìm thấy một tài liệu để kiểm tra, nó sử dụng một bản sao nông của ____ 51, để các thử nghiệm chạy không thay đổi toàn cầu thực của mô -đun và do đó một thử nghiệm trong
import doctest
doctest.testfile("example.txt")
1 không thể để lại những mảnh vụn mà vô tình cho phép Một bài kiểm tra khác để làm việc. Điều này có nghĩa là các ví dụ có thể tự do sử dụng bất kỳ tên nào được xác định ở cấp cao nhất trong
import doctest
doctest.testfile("example.txt")
1 và các tên được xác định trước đó trong tài liệu đang được chạy. Ví dụ không thể nhìn thấy tên được xác định trong các tài liệu khác.

Bạn có thể buộc sử dụng cho chính quyền của mình làm bối cảnh thực thi bằng cách chuyển

$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
00 sang
import doctest
doctest.testfile("example.txt")
7 hoặc
The ``example`` module
======================

Using ``factorial``
-------------------

This is an example text file in reStructuredText format.  First import
``factorial`` from the ``example`` module:

    >>> from example import factorial

Now use it:

    >>> factorial(6)
    120
6 thay thế.

25.2.3.4. Còn ngoại lệ thì sao? ¶What About Exceptions?¶

Không có vấn đề gì, với điều kiện là dấu vết là đầu ra duy nhất được tạo ra bởi ví dụ: chỉ dán vào dấu vết. 1 Vì Tracebacks chứa các chi tiết có khả năng thay đổi nhanh chóng (ví dụ: đường dẫn tệp và số dòng chính xác), đây là một trường hợp mà DocTest làm việc chăm chỉ để linh hoạt trong những gì nó chấp nhận.

Ví dụ đơn giản:

$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
3

Doctest đó thành công nếu

$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
03 được nâng lên, với chi tiết
$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
04 như được hiển thị.

Đầu ra dự kiến ​​cho một ngoại lệ phải bắt đầu bằng tiêu đề Traceback, có thể là một trong hai dòng sau, được thụt vào giống như dòng đầu tiên của ví dụ:

$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
4

Tiêu đề Traceback được theo sau bởi một ngăn xếp theo dõi tùy chọn, có nội dung bị bỏ qua bởi DocTest. Ngăn xếp theo dõi thường bị bỏ qua hoặc sao chép nguyên văn từ phiên tương tác.

Ngăn xếp theo dõi được theo sau bởi phần thú vị nhất: (các) dòng chứa loại ngoại lệ và chi tiết. Đây thường là dòng cuối cùng của một dấu vết, nhưng có thể mở rộng trên nhiều dòng nếu ngoại lệ có chi tiết đa dòng:

$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
5

Ba dòng cuối cùng (bắt đầu với

$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
03) được so sánh với loại ngoại lệ và chi tiết, và phần còn lại bị bỏ qua.

Thay đổi trong phiên bản 2.4: Các phiên bản trước không thể xử lý các chi tiết ngoại lệ đa dòng.Previous versions were unable to handle multi-line exception details.

Thực tiễn tốt nhất là bỏ qua ngăn xếp Traceback, trừ khi nó thêm giá trị tài liệu quan trọng vào ví dụ. Vì vậy, ví dụ cuối cùng có lẽ tốt hơn như:

$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
6

Lưu ý rằng Tracebacks được đối xử rất đặc biệt. Cụ thể, trong ví dụ viết lại, việc sử dụng

$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
06 không phụ thuộc vào tùy chọn Doctest ____ ____107. Các dấu chấm lửng trong ví dụ đó có thể bị bỏ lại, hoặc cũng có thể là ba (hoặc ba trăm) dấu phẩy hoặc chữ số, hoặc một bản sao thụt của một tiểu phẩm Monty Python.

Một số chi tiết bạn nên đọc một lần, nhưng won cần phải nhớ:

  • Doctest có thể đoán xem đầu ra mong đợi của bạn đến từ một dấu vết ngoại lệ hay từ in thông thường. Vì vậy, ví dụ: một ví dụ mong đợi

    $ python example.py -v
    Trying:
        factorial(5)
    Expecting:
        120
    ok
    Trying:
        [factorial(n) for n in range(6)]
    Expecting:
        [1, 1, 2, 6, 24, 120]
    ok
    Trying:
        [factorial(long(n)) for n in range(6)]
    Expecting:
        [1, 1, 2, 6, 24, 120]
    ok
    
    08 sẽ vượt qua liệu
    $ python example.py -v
    Trying:
        factorial(5)
    Expecting:
        120
    ok
    Trying:
        [factorial(n) for n in range(6)]
    Expecting:
        [1, 1, 2, 6, 24, 120]
    ok
    Trying:
        [factorial(long(n)) for n in range(6)]
    Expecting:
        [1, 1, 2, 6, 24, 120]
    ok
    
    03 có thực sự được nêu ra hay nếu ví dụ chỉ in văn bản theo dõi đó. Trong thực tế, đầu ra thông thường hiếm khi bắt đầu bằng một đường tiêu đề Traceback, vì vậy điều này không tạo ra vấn đề thực sự.

  • Mỗi dòng của ngăn xếp Traceback (nếu có) phải được thụt vào hơn so với dòng đầu tiên của ví dụ hoặc bắt đầu với một ký tự không phải là vô cầu. Dòng đầu tiên theo tiêu đề Traceback được thụt vào giống nhau và bắt đầu với chữ và số được lấy để trở thành khởi đầu của chi tiết ngoại lệ. Tất nhiên điều này làm điều đúng đắn cho những người theo dõi chính hãng.

  • Khi tùy chọn DocTest

    $ python example.py -v
    Trying:
        factorial(5)
    Expecting:
        120
    ok
    Trying:
        [factorial(n) for n in range(6)]
    Expecting:
        [1, 1, 2, 6, 24, 120]
    ok
    Trying:
        [factorial(long(n)) for n in range(6)]
    Expecting:
        [1, 1, 2, 6, 24, 120]
    ok
    
    10 được chỉ định, mọi thứ theo đại tràng ngoài cùng bên trái và bất kỳ thông tin mô -đun nào trong tên ngoại lệ đều bị bỏ qua.

  • Shell tương tác bỏ qua dòng tiêu đề Traceback cho một số

    $ python example.py -v
    Trying:
        factorial(5)
    Expecting:
        120
    ok
    Trying:
        [factorial(n) for n in range(6)]
    Expecting:
        [1, 1, 2, 6, 24, 120]
    ok
    Trying:
        [factorial(long(n)) for n in range(6)]
    Expecting:
        [1, 1, 2, 6, 24, 120]
    ok
    
    11. Nhưng DocTest sử dụng dòng tiêu đề Traceback để phân biệt các ngoại lệ với các ngoại lệ. Vì vậy, trong trường hợp hiếm hoi mà bạn cần kiểm tra
    $ python example.py -v
    Trying:
        factorial(5)
    Expecting:
        120
    ok
    Trying:
        [factorial(n) for n in range(6)]
    Expecting:
        [1, 1, 2, 6, 24, 120]
    ok
    Trying:
        [factorial(long(n)) for n in range(6)]
    Expecting:
        [1, 1, 2, 6, 24, 120]
    ok
    
    11 bỏ qua tiêu đề Traceback, bạn sẽ cần thêm đường tiêu đề Traceback vào ví dụ thử nghiệm của bạn.

  • Đối với một số

    $ python example.py -v
    Trying:
        factorial(5)
    Expecting:
        120
    ok
    Trying:
        [factorial(n) for n in range(6)]
    Expecting:
        [1, 1, 2, 6, 24, 120]
    ok
    Trying:
        [factorial(long(n)) for n in range(6)]
    Expecting:
        [1, 1, 2, 6, 24, 120]
    ok
    
    11, Python hiển thị vị trí ký tự của lỗi cú pháp, sử dụng điểm đánh dấu
    $ python example.py -v
    Trying:
        factorial(5)
    Expecting:
        120
    ok
    Trying:
        [factorial(n) for n in range(6)]
    Expecting:
        [1, 1, 2, 6, 24, 120]
    ok
    Trying:
        [factorial(long(n)) for n in range(6)]
    Expecting:
        [1, 1, 2, 6, 24, 120]
    ok
    
    14:

    $ python example.py -v
    Trying:
        factorial(5)
    Expecting:
        120
    ok
    Trying:
        [factorial(n) for n in range(6)]
    Expecting:
        [1, 1, 2, 6, 24, 120]
    ok
    Trying:
        [factorial(long(n)) for n in range(6)]
    Expecting:
        [1, 1, 2, 6, 24, 120]
    ok
    
    7

    Vì các dòng hiển thị vị trí của lỗi xuất hiện trước loại ngoại lệ và chi tiết, chúng không được kiểm tra bởi DocTest. Ví dụ: thử nghiệm sau đây sẽ vượt qua, mặc dù nó đặt điểm đánh dấu

    $ python example.py -v
    Trying:
        factorial(5)
    Expecting:
        120
    ok
    Trying:
        [factorial(n) for n in range(6)]
    Expecting:
        [1, 1, 2, 6, 24, 120]
    ok
    Trying:
        [factorial(long(n)) for n in range(6)]
    Expecting:
        [1, 1, 2, 6, 24, 120]
    ok
    
    14 vào vị trí sai:

    $ python example.py -v
    Trying:
        factorial(5)
    Expecting:
        120
    ok
    Trying:
        [factorial(n) for n in range(6)]
    Expecting:
        [1, 1, 2, 6, 24, 120]
    ok
    Trying:
        [factorial(long(n)) for n in range(6)]
    Expecting:
        [1, 1, 2, 6, 24, 120]
    ok
    
    8

25.2.3.5. Tùy chọn cờOption Flags¶

Một số cờ tùy chọn kiểm soát các khía cạnh khác nhau của hành vi Doctest. Tên tượng trưng cho các cờ được cung cấp dưới dạng hằng số mô -đun, có thể được tạo ra cùng nhau và được chuyển đến các chức năng khác nhau. Các tên cũng có thể được sử dụng trong các chỉ thị của Doctest.bitwise ORed together and passed to various functions. The names can also be used in doctest directives.

Nhóm đầu tiên của các tùy chọn xác định ngữ nghĩa kiểm tra, kiểm soát các khía cạnh về cách học quyết định liệu đầu ra thực tế có khớp với một ví dụ đầu ra dự kiến ​​hay không:

________ 116 ________ 117¶

Theo mặc định, nếu một khối đầu ra dự kiến ​​chỉ chứa

$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
18, một khối đầu ra thực tế chỉ chứa
$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
18 hoặc chỉ
$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
20 được coi là phù hợp và tương tự với
$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
21 so với
$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
22. Khi
$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
23 được chỉ định, không cho phép thay thế. Hành vi mặc định phục vụ cho python đó đã thay đổi loại trả về nhiều hàm từ số nguyên sang boolean; Các tài liệu mong đợi sản lượng của Little Integer vẫn hoạt động trong những trường hợp này. Tùy chọn này có thể sẽ biến mất, nhưng không phải trong vài năm.

________ 116 ________ 125¶

Theo mặc định, nếu một khối đầu ra dự kiến ​​chứa một dòng chỉ chứa chuỗi

>>> # comments are ignored
>>> x = 12
>>> x
12
>>> if x == 13:
...     print "yes"
... else:
...     print "no"
...     print "NO"
...     print "NO!!!"
...
no
NO
NO!!!
>>>
0, thì dòng đó sẽ khớp với một dòng trống trong đầu ra thực tế. Bởi vì một dòng trống thực sự phân tách đầu ra dự kiến, đây là cách duy nhất để giao tiếp mà một dòng trống được mong đợi. Khi
$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
27 được chỉ định, sự thay thế này không được phép.

________ 116 ________ 129¶

Khi được chỉ định, tất cả các chuỗi của khoảng trắng (khoảng trống và newlines) được coi là bằng nhau. Bất kỳ chuỗi khoảng trắng nào trong đầu ra dự kiến ​​sẽ phù hợp với bất kỳ chuỗi khoảng trắng nào trong đầu ra thực tế. Theo mặc định, khoảng trắng phải khớp chính xác.

>>> # comments are ignored
>>> x = 12
>>> x
12
>>> if x == 13:
...     print "yes"
... else:
...     print "no"
...     print "NO"
...     print "NO!!!"
...
no
NO
NO!!!
>>>
2 đặc biệt hữu ích khi một dòng đầu ra dự kiến ​​rất dài và bạn muốn bọc nó trên nhiều dòng trong nguồn của bạn.

________ 116 ________ 132¶

Khi được chỉ định, điểm đánh dấu Ellipsis (

$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
06) trong đầu ra dự kiến ​​có thể khớp với bất kỳ chất nền nào trong đầu ra thực tế. Điều này bao gồm các chuỗi con bao gồm các ranh giới dòng và các nền tảng trống, vì vậy, tốt nhất là giữ cho việc sử dụng đơn giản này. Việc sử dụng phức tạp có thể dẫn đến các loại tương tự của OOP, nó phù hợp quá nhiều! Điều ngạc nhiên là
$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
34 dễ bị biểu cảm thường xuyên.

________ 116 ________ 136¶

Khi được chỉ định, một ví dụ mong đợi một ngoại lệ vượt qua nếu một ngoại lệ của loại dự kiến ​​được nêu ra, ngay cả khi chi tiết ngoại lệ không khớp. Ví dụ: một ví dụ mong đợi

$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
37 sẽ vượt qua nếu ngoại lệ thực tế được nâng lên là
$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
38, nhưng sẽ thất bại, ví dụ: nếu
$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
39 được nâng lên.

Nó cũng sẽ bỏ qua tên mô -đun được sử dụng trong các báo cáo của Python 3. Do đó, cả hai biến thể này sẽ hoạt động với cờ được chỉ định, bất kể thử nghiệm có được chạy theo Python 2.7 hay Python 3.2 (hoặc các phiên bản sau này):

$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
9

Lưu ý rằng

$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
07 cũng có thể được sử dụng để bỏ qua các chi tiết của thông báo ngoại lệ, nhưng thử nghiệm như vậy vẫn có thể thất bại dựa trên việc các chi tiết mô -đun có được in như một phần của tên ngoại lệ hay không. Sử dụng
$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
10 và các chi tiết từ Python 2.3 cũng là cách rõ ràng duy nhất để viết một tài liệu không quan tâm đến chi tiết ngoại lệ nhưng vẫn tiếp tục vượt qua Python 2.3 hoặc sớm hơn (các bản phát hành đó không hỗ trợ các chỉ thị tài liệu và bỏ qua chúng như những bình luận không liên quan ). Ví dụ:doctest directives and ignore them as irrelevant comments). For example:

Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
0

Vượt qua dưới Python 2.3 và sau đó là phiên bản Python với cờ được chỉ định, mặc dù chi tiết đã thay đổi trong Python 2.4 để nói rằng, không phải là thay vì của Google.

Đã thay đổi trong phiên bản 2.7:

$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
10 Bây giờ cũng bỏ qua bất kỳ thông tin nào liên quan đến mô -đun có chứa ngoại lệ được kiểm tra
$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
10 now also ignores any information relating to the module containing the exception under test

________ 116 ________ 144¶

Khi được chỉ định, không chạy ví dụ gì cả. Điều này có thể hữu ích trong các bối cảnh nơi các ví dụ tài liệu đóng vai trò là cả tài liệu và trường hợp thử nghiệm, và một ví dụ nên được đưa vào cho mục đích tài liệu, nhưng không nên được kiểm tra. Ví dụ: đầu ra ví dụ có thể là ngẫu nhiên; hoặc ví dụ có thể phụ thuộc vào tài nguyên không có sẵn cho trình điều khiển thử nghiệm.

Cờ bỏ qua cũng có thể được sử dụng để nhận xét tạm thời các ví dụ về các ví dụ.

Mới trong phiên bản 2.5.

________ 116 ________ 146¶

Một bitmask hoặc cùng nhau tất cả các cờ so sánh ở trên.

Nhóm thứ hai của các tùy chọn kiểm soát cách thức các lỗi kiểm tra được báo cáo:

________ 116 ________ 148¶

Khi được chỉ định, các lỗi liên quan đến dự kiến ​​đa dòng và đầu ra thực tế được hiển thị bằng cách sử dụng một khác biệt thống nhất.

________ 116 ________ 150¶

Khi được chỉ định, các lỗi liên quan đến dự kiến ​​nhiều dòng và đầu ra thực tế sẽ được hiển thị bằng cách sử dụng bối cảnh khác biệt.

________ 116 ________ 152¶

Khi được chỉ định, sự khác biệt được tính bằng

$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
53, sử dụng cùng một thuật toán như tiện ích
$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
54 phổ biến. Đây là phương pháp duy nhất đánh dấu sự khác biệt trong các dòng cũng như trên các dòng. Ví dụ: nếu một dòng đầu ra dự kiến ​​có chứa chữ số
$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
18 trong đó đầu ra thực tế chứa chữ cái
$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
56, một dòng được chèn bằng một chăm sóc đánh dấu các vị trí cột không khớp.

________ 116 ________ 158¶

Khi được chỉ định, hiển thị ví dụ thất bại đầu tiên trong mỗi tài liệu, nhưng triệt tiêu đầu ra cho tất cả các ví dụ còn lại. Điều này sẽ ngăn học DoCTest báo cáo các ví dụ chính xác bị phá vỡ vì những thất bại trước đó; Nhưng nó cũng có thể che giấu các ví dụ không chính xác mà thất bại độc lập với thất bại đầu tiên. Khi

$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
59 được chỉ định, các ví dụ còn lại vẫn được chạy và vẫn được tính vào tổng số lỗi được báo cáo; Chỉ có đầu ra bị triệt tiêu.

________ 116 ________ 161¶

Một bitmask hoặc cùng nhau tất cả các cờ báo cáo ở trên.

Ngoài ra, còn có một cách để đăng ký tên cờ tùy chọn mới, mặc dù điều này không hữu ích trừ khi bạn có ý định mở rộng nội bộ

python -m doctest -v example.py
4 thông qua lớp con:

________ 116 ________ 164 (Tên) ¶(name)

Tạo một cờ tùy chọn mới với một tên nhất định và trả về giá trị số nguyên của cờ mới.

$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
65 có thể được sử dụng khi phân lớp
$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
66 hoặc
$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
67 để tạo các tùy chọn mới được hỗ trợ bởi các lớp con của bạn.
$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
65 phải luôn được gọi bằng thành ngữ sau:

Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
1

Mới trong phiên bản 2.4.

25.2.3.6. Chỉ thị BurDirectives¶

Các chỉ thị của DocTest có thể được sử dụng để sửa đổi các cờ tùy chọn cho một ví dụ riêng lẻ. Các chỉ thị của DocTest là những bình luận Python đặc biệt theo một ví dụ về mã nguồn của bạn:option flags for an individual example. Doctest directives are special Python comments following an example’s source code:

Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
2

Whitespace không được phép giữa

$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
69 hoặc
$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
70 và tên tùy chọn chỉ thị. Tên tùy chọn chỉ thị có thể là bất kỳ tên cờ tùy chọn nào được giải thích ở trên.

Một ví dụ về các chỉ thị tài liệu của tài liệu sửa đổi hành vi của DocTest đối với ví dụ duy nhất đó. Sử dụng

$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
69 để kích hoạt hành vi được đặt tên hoặc
$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
70 để vô hiệu hóa nó.

Ví dụ, bài kiểm tra này vượt qua:

Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
3

Nếu không có chỉ thị, nó sẽ thất bại, cả vì đầu ra thực tế không có hai khoảng trống trước các yếu tố danh sách một chữ số và vì đầu ra thực tế nằm trên một dòng. Bài kiểm tra này cũng vượt qua, và cũng yêu cầu một chỉ thị để làm như vậy:

Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
4

Nhiều chỉ thị có thể được sử dụng trên một dòng vật lý, được phân tách bằng dấu phẩy:

Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
5

Nếu nhiều nhận xét chỉ thị được sử dụng cho một ví dụ duy nhất, thì chúng được kết hợp:

Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
6

Như ví dụ trước đây cho thấy, bạn có thể thêm các dòng

$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
06 vào ví dụ của bạn chỉ chứa các chỉ thị. Điều này có thể hữu ích khi một ví dụ quá dài cho một chỉ thị để thoải mái phù hợp với cùng một dòng:

Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
7

Lưu ý rằng vì tất cả các tùy chọn đều bị vô hiệu hóa theo mặc định và các chỉ thị chỉ áp dụng cho ví dụ chúng xuất hiện, cho phép các tùy chọn (thông qua

$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
69 trong một chỉ thị) thường là lựa chọn có ý nghĩa duy nhất. Tuy nhiên, các cờ tùy chọn cũng có thể được chuyển đến các chức năng chạy tài liệu, thiết lập các mặc định khác nhau. Trong những trường hợp như vậy, việc vô hiệu hóa một tùy chọn thông qua
$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
70 trong một chỉ thị có thể hữu ích.

Mới trong phiên bản 2.4: Hỗ trợ cho các chỉ thị doctest đã được thêm vào.Support for doctest directives was added.

25.2.3.7. Cảnh báo JoWarnings¶

python -m doctest -v example.py
4 nghiêm túc về việc yêu cầu các trận đấu chính xác trong sản lượng dự kiến. Nếu ngay cả một ký tự duy nhất không phù hợp, thì bài kiểm tra không thành công. Điều này có thể sẽ làm bạn ngạc nhiên một vài lần, khi bạn tìm hiểu chính xác những gì Python làm và không đảm bảo về đầu ra. Ví dụ: khi in một dict, Python không đảm bảo rằng các cặp giá trị khóa sẽ được in theo bất kỳ thứ tự cụ thể nào, vì vậy một bài kiểm tra như

Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
8

là dễ bị tổn thương! Một cách giải quyết là phải làm

Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
9

thay vì. Một người khác là làm

if __name__ == "__main__":
    import doctest
    doctest.testmod()
0

Có những người khác, nhưng bạn có được ý tưởng.

Một ý tưởng tồi khác là in những thứ nhúng địa chỉ đối tượng, như

if __name__ == "__main__":
    import doctest
    doctest.testmod()
1

Chỉ thị

$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
07 đưa ra một cách tiếp cận tốt đẹp cho ví dụ cuối cùng:

if __name__ == "__main__":
    import doctest
    doctest.testmod()
2

Số điểm nổi cũng phải tuân theo các biến thể đầu ra nhỏ trên các nền tảng, bởi vì Python bảo vệ thư viện nền tảng C để định dạng float và các thư viện C rất khác nhau về chất lượng ở đây.

if __name__ == "__main__":
    import doctest
    doctest.testmod()
3

Số lượng của Mẫu

$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
78 an toàn trên tất cả các nền tảng và tôi thường quyết định các ví dụ tài liệu để tạo ra số lượng hình thức đó:

if __name__ == "__main__":
    import doctest
    doctest.testmod()
4

Phân số đơn giản cũng dễ hiểu hơn cho mọi người, và điều đó làm cho tài liệu tốt hơn.

25.2.4. API cơ bảnBasic API¶

Các chức năng

import doctest
doctest.testfile("example.txt")
7 và
The ``example`` module
======================

Using ``factorial``
-------------------

This is an example text file in reStructuredText format.  First import
``factorial`` from the ``example`` module:

    >>> from example import factorial

Now use it:

    >>> factorial(6)
    120
6 cung cấp một giao diện đơn giản cho tài liệu phải đủ cho hầu hết các mục đích sử dụng cơ bản. Để giới thiệu ít chính thức hơn về hai chức năng này, hãy xem các phần Sử dụng đơn giản: Kiểm tra các ví dụ trong DocStrings và sử dụng đơn giản: Kiểm tra các ví dụ trong tệp văn bản.Simple Usage: Checking Examples in Docstrings and Simple Usage: Checking Examples in a Text File.

________ 116 ________ 182 (tên tệp [, module_relative] [, name] [, gói] [, globs] [, verbose] [, báo cáo] [, tùy chọn flags] [, extraglobs](filename[, module_relative][, name][, package][, globs][, verbose][, report][, optionflags][, extraglobs][, raise_on_error][, parser][, encoding])

Tất cả các đối số ngoại trừ tên tệp là tùy chọn và nên được chỉ định ở dạng từ khóa.

Các ví dụ kiểm tra trong tệp có tên FileName. Trả lại

$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
83.

Đối số tùy chọn Module_Relative Chỉ định cách giải thích tên tệp:

  • Nếu module_relative là

    $ python example.py -v
    Trying:
        factorial(5)
    Expecting:
        120
    ok
    Trying:
        [factorial(n) for n in range(6)]
    Expecting:
        [1, 1, 2, 6, 24, 120]
    ok
    Trying:
        [factorial(long(n)) for n in range(6)]
    Expecting:
        [1, 1, 2, 6, 24, 120]
    ok
    
    20 (mặc định), thì FileName chỉ định một đường dẫn liên quan đến mô-đun độc lập OS. Theo mặc định, đường dẫn này liên quan đến thư mục mô -đun gọi; Nhưng nếu đối số gói được chỉ định, thì nó có liên quan đến gói đó. Để đảm bảo sự độc lập của hệ điều hành, tên tệp nên sử dụng các ký tự
    $ python example.py -v
    Trying:
        factorial(5)
    Expecting:
        120
    ok
    Trying:
        [factorial(n) for n in range(6)]
    Expecting:
        [1, 1, 2, 6, 24, 120]
    ok
    Trying:
        [factorial(long(n)) for n in range(6)]
    Expecting:
        [1, 1, 2, 6, 24, 120]
    ok
    
    85 để tách các phân đoạn đường dẫn và có thể không phải là một đường dẫn tuyệt đối (nghĩa là, nó có thể không bắt đầu với
    $ python example.py -v
    Trying:
        factorial(5)
    Expecting:
        120
    ok
    Trying:
        [factorial(n) for n in range(6)]
    Expecting:
        [1, 1, 2, 6, 24, 120]
    ok
    Trying:
        [factorial(long(n)) for n in range(6)]
    Expecting:
        [1, 1, 2, 6, 24, 120]
    ok
    
    85).

  • Nếu module_relative là

    $ python example.py -v
    Trying:
        factorial(5)
    Expecting:
        120
    ok
    Trying:
        [factorial(n) for n in range(6)]
    Expecting:
        [1, 1, 2, 6, 24, 120]
    ok
    Trying:
        [factorial(long(n)) for n in range(6)]
    Expecting:
        [1, 1, 2, 6, 24, 120]
    ok
    
    22, thì tên tệp chỉ định một đường dẫn dành riêng cho hệ điều hành. Con đường có thể là tuyệt đối hoặc tương đối; Các đường dẫn tương đối được giải quyết đối với thư mục làm việc hiện tại.

Tên đối số tùy chọn cho biết tên của bài kiểm tra; Theo mặc định, hoặc nếu

$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
88,
$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
89 được sử dụng.

Gói đối số tùy chọn là gói Python hoặc tên của gói Python có thư mục nên được sử dụng làm thư mục cơ sở cho tên tệp liên quan đến mô-đun. Nếu không có gói nào được chỉ định, thì thư mục mô-đun gọi được sử dụng làm thư mục cơ sở cho các tên tệp liên quan đến mô-đun. Đó là một lỗi để chỉ định gói nếu module_relative là

$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
22.

Các nhóm đối số tùy chọn đưa ra một dict để được sử dụng làm toàn cầu khi thực hiện các ví dụ. Một bản sao mới của Dict này được tạo ra cho Doctest, vì vậy các ví dụ của nó bắt đầu bằng một bảng xếp hạng sạch. Theo mặc định, hoặc nếu

$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
88, một dict trống mới được sử dụng.

Đối số tùy chọn Extraglobs đưa ra một dict được hợp nhất vào các thế giới được sử dụng để thực hiện các ví dụ. Điều này hoạt động như

$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
92: Nếu các quả cầu và ngoại vi có một khóa chung, giá trị liên quan trong ngoại lệ xuất hiện trong chế độ kết hợp. Theo mặc định, hoặc nếu
$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
88, không có toàn cầu bổ sung được sử dụng. Đây là một tính năng nâng cao cho phép tham số hóa các tài liệu. Ví dụ, một tài liệu nhất có thể được viết cho một lớp cơ sở, sử dụng tên chung cho lớp, sau đó sử dụng lại để kiểm tra bất kỳ số lớp con nào bằng cách truyền một bản đồ giả lập tên lập bản đồ tên chung cho lớp con để được kiểm tra.

Đối số tùy chọn in dài dòng in nhiều thứ nếu đúng và chỉ in không thành công nếu sai; Theo mặc định, hoặc nếu

$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
88, thì đó là sự thật nếu và chỉ khi
$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
95 nằm trong
import doctest
doctest.testfile("example.txt")
9.

Báo cáo đối số tùy chọn in một bản tóm tắt ở cuối khi đúng, nếu không in không có gì ở cuối. Trong chế độ Verbose, bản tóm tắt là chi tiết, nếu không thì bản tóm tắt rất ngắn gọn (trên thực tế, trống nếu tất cả các bài kiểm tra được thông qua).

Đối số tùy chọn tùy chọn flagflags hoặc các cờ tùy chọn cùng nhau. Xem phần Cờ tùy chọn.Option Flags.

Đối số tùy chọn RAISE_ON_ERROR mặc định là sai. Nếu đúng, một ngoại lệ được nêu ra khi thất bại đầu tiên hoặc ngoại lệ bất ngờ trong một ví dụ. Điều này cho phép thất bại được gỡ lỗi sau khi chết. Hành vi mặc định là tiếp tục chạy các ví dụ.

Trình phân tích cú pháp đối số tùy chọn chỉ định

>>> # comments are ignored
>>> x = 12
>>> x
12
>>> if x == 13:
...     print "yes"
... else:
...     print "no"
...     print "NO"
...     print "NO!!!"
...
no
NO
NO!!!
>>>
3 (hoặc lớp con) nên được sử dụng để trích xuất các thử nghiệm từ các tệp. Nó mặc định là một trình phân tích cú pháp bình thường (nghĩa là,
$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
98).

Mã hóa đối số tùy chọn Chỉ định một mã hóa nên được sử dụng để chuyển đổi tệp thành Unicode.

Mới trong phiên bản 2.4.

Thay đổi trong phiên bản 2.5: Mã hóa tham số đã được thêm vào.The parameter encoding was added.

A([m][, name][, globs][, verbose][, report][, optionflags][, extraglobs][, raise_on_error][, exclude_empty])

Tất cả các đối số là tùy chọn và tất cả ngoại trừ M nên được chỉ định ở dạng từ khóa.

Các ví dụ thử nghiệm trong các tài liệu trong các chức năng và các lớp có thể truy cập được từ mô -đun M (hoặc mô -đun

Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
01 nếu M không được cung cấp hoặc là
$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
88), bắt đầu bằng
Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
03.

Cũng có thể kiểm tra các ví dụ có thể truy cập được từ Dict

Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
04, nếu nó tồn tại và không phải là
$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
88.
Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
04 Bản đồ tên (chuỗi) cho các chức năng, lớp và chuỗi; chức năng và tài liệu lớp được tìm kiếm các ví dụ; Chuỗi được tìm kiếm trực tiếp, như thể chúng là tài liệu.

Chỉ các tài liệu được gắn vào các đối tượng thuộc mô -đun m mới được tìm kiếm.

Trả lại

Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
07.

Tên đối số tùy chọn đặt tên của mô -đun; Theo mặc định, hoặc nếu

$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
88,
Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
09 được sử dụng.

Đối số tùy chọn loại trừ mặc định là sai. Nếu đúng, các đối tượng mà không tìm thấy tài liệu nào được tìm thấy khỏi việc xem xét. Mặc định là một hack khả năng tương thích ngược, do đó mã vẫn sử dụng

Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
10 kết hợp với
import doctest
doctest.testfile("example.txt")
7 tiếp tục nhận được đầu ra cho các đối tượng không có kiểm tra. Đối số EXXALD_EMPTY cho hàm tạo
Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
12 mới hơn mặc định là true.

Các đối số tùy chọn ngoại khóa, verbose, báo cáo, tùy chọnflags, raise_on_error và globs giống như đối với chức năng

The ``example`` module
======================

Using ``factorial``
-------------------

This is an example text file in reStructuredText format.  First import
``factorial`` from the ``example`` module:

    >>> from example import factorial

Now use it:

    >>> factorial(6)
    120
6 ở trên, ngoại trừ các globs mặc định là
Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
14.

Thay đổi trong phiên bản 2.3: Tùy chọn tham số đã được thêm vào.The parameter optionflags was added.

Đã thay đổi trong phiên bản 2.4: Các tham số Extraglobs, RAISE_ON_ERROR và EXCLUDE_EMPTY đã được thêm vào.The parameters extraglobs, raise_on_error and exclude_empty were added.

Thay đổi trong phiên bản 2.5: đối số tùy chọn isprivate, không được dùng trong 2.4, đã bị xóa.The optional argument isprivate, deprecated in 2.4, was removed.

A(f, globs[, verbose][, name][, compileflags][, optionflags])

Các ví dụ thử nghiệm liên quan đến đối tượng F; Ví dụ: F có thể là một chuỗi, mô -đun, hàm hoặc đối tượng lớp.

Một bản sao nông của Globs đối số từ điển được sử dụng cho bối cảnh thực thi.

Tên đối số tùy chọn được sử dụng trong các tin nhắn thất bại và mặc định là

Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
17.

Nếu một đối số tùy chọn là đúng, đầu ra được tạo ra ngay cả khi không có lỗi. Theo mặc định, đầu ra chỉ được tạo trong trường hợp lỗi ví dụ.

CompileFlags đối số tùy chọn cung cấp cho tập hợp các cờ nên được sử dụng bởi trình biên dịch Python khi chạy các ví dụ. Theo mặc định, hoặc nếu

$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
88, cờ được suy ra tương ứng với tập hợp các tính năng trong tương lai được tìm thấy trong các quả cầu.

Tùy chọn tùy chọn Tùy chọn Forgetflags hoạt động như cho chức năng

The ``example`` module
======================

Using ``factorial``
-------------------

This is an example text file in reStructuredText format.  First import
``factorial`` from the ``example`` module:

    >>> from example import factorial

Now use it:

    >>> factorial(6)
    120
6 ở trên.

25.2.5. API nhấtUnittest API¶

Khi bộ sưu tập các mô -đun tài liệu của bạn phát triển, bạn sẽ muốn một cách để chạy tất cả các tài liệu của họ một cách có hệ thống. Trước Python 2.4,

python -m doctest -v example.py
4 đã có một lớp
Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
21 hầu như không được ghi nhận cung cấp một cách thô sơ để kết hợp các tài liệu từ nhiều mô -đun.
Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
21 là yếu đuối và trên thực tế, hầu hết các khung thử nghiệm Python nghiêm trọng được xây dựng trên mô -đun
Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
23, cung cấp nhiều cách linh hoạt để kết hợp các thử nghiệm từ nhiều nguồn. Vì vậy, trong lớp Python 2.4, ________ 44 ____ ____221 không được dùng và
python -m doctest -v example.py
4 cung cấp hai chức năng có thể được sử dụng để tạo các bộ kiểm tra
Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
23 từ các mô -đun và tệp văn bản có chứa tài liệu. Để tích hợp với khám phá thử nghiệm
Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
23, hãy bao gồm chức năng
Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
29 trong mô -đun thử nghiệm của bạn:

if __name__ == "__main__":
    import doctest
    doctest.testmod()
5

Có hai chức năng chính để tạo các phiên bản

Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
30 từ các tệp văn bản và mô -đun với tài liệu:

A(*paths, [module_relative][, package][, setUp][, tearDown][, globs][, optionflags][, parser][, encoding])

Chuyển đổi các bài kiểm tra DocTest từ một hoặc nhiều tệp văn bản thành

Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
30.

Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
30 được trả về sẽ được chạy bởi khung Unittest và chạy các ví dụ tương tác trong mỗi tệp. Nếu một ví dụ trong bất kỳ tệp nào bị lỗi, thì thử nghiệm đơn vị được tổng hợp không thành công và ngoại lệ
Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
35 được nêu ra hiển thị tên của tệp chứa thử nghiệm và số dòng (đôi khi gần đúng).

Chuyển một hoặc nhiều đường dẫn (dưới dạng chuỗi) cho các tệp văn bản để được kiểm tra.

Các tùy chọn có thể được cung cấp dưới dạng đối số từ khóa:

Đối số tùy chọn Module_Relative Chỉ định cách diễn giải các tên tệp trong các đường dẫn:

  • Nếu module_relative là

    $ python example.py -v
    Trying:
        factorial(5)
    Expecting:
        120
    ok
    Trying:
        [factorial(n) for n in range(6)]
    Expecting:
        [1, 1, 2, 6, 24, 120]
    ok
    Trying:
        [factorial(long(n)) for n in range(6)]
    Expecting:
        [1, 1, 2, 6, 24, 120]
    ok
    
    20 (mặc định), thì mỗi tên tệp trong các đường dẫn chỉ định một đường dẫn liên quan đến mô-đun độc lập OS. Theo mặc định, đường dẫn này liên quan đến thư mục mô -đun gọi; Nhưng nếu đối số gói được chỉ định, thì nó có liên quan đến gói đó. Để đảm bảo sự phụ thuộc của hệ điều hành, mỗi tên tệp nên sử dụng
    $ python example.py -v
    Trying:
        factorial(5)
    Expecting:
        120
    ok
    Trying:
        [factorial(n) for n in range(6)]
    Expecting:
        [1, 1, 2, 6, 24, 120]
    ok
    Trying:
        [factorial(long(n)) for n in range(6)]
    Expecting:
        [1, 1, 2, 6, 24, 120]
    ok
    
    85 ký tự để tách các phân đoạn đường dẫn và có thể không phải là một đường dẫn tuyệt đối (nghĩa là, nó có thể không bắt đầu bằng
    $ python example.py -v
    Trying:
        factorial(5)
    Expecting:
        120
    ok
    Trying:
        [factorial(n) for n in range(6)]
    Expecting:
        [1, 1, 2, 6, 24, 120]
    ok
    Trying:
        [factorial(long(n)) for n in range(6)]
    Expecting:
        [1, 1, 2, 6, 24, 120]
    ok
    
    85).

  • Nếu module_relative là

    $ python example.py -v
    Trying:
        factorial(5)
    Expecting:
        120
    ok
    Trying:
        [factorial(n) for n in range(6)]
    Expecting:
        [1, 1, 2, 6, 24, 120]
    ok
    Trying:
        [factorial(long(n)) for n in range(6)]
    Expecting:
        [1, 1, 2, 6, 24, 120]
    ok
    
    22, thì mỗi tên tệp trong các đường dẫn chỉ định một đường dẫn dành riêng cho hệ điều hành. Con đường có thể là tuyệt đối hoặc tương đối; Các đường dẫn tương đối được giải quyết đối với thư mục làm việc hiện tại.

Gói đối số tùy chọn là gói Python hoặc tên của gói Python có thư mục nên được sử dụng làm thư mục cơ sở cho các tên tệp liên quan đến mô-đun trong các đường dẫn. Nếu không có gói nào được chỉ định, thì thư mục mô-đun gọi được sử dụng làm thư mục cơ sở cho các tên tệp liên quan đến mô-đun. Đó là một lỗi để chỉ định gói nếu module_relative là

$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
22.

Thiết lập đối số tùy chọn Chỉ định chức năng thiết lập cho bộ thử nghiệm. Điều này được gọi trước khi chạy các bài kiểm tra trong mỗi tệp. Hàm thiết lập sẽ được truyền một đối tượng

Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
41. Chức năng thiết lập có thể truy cập các thử nghiệm toàn cầu khi thuộc tính GLOBS của thử nghiệm được thông qua.

Teardown đối số tùy chọn Chỉ định chức năng phá vỡ cho bộ thử nghiệm. Điều này được gọi sau khi chạy các bài kiểm tra trong mỗi tệp. Hàm Tear Down sẽ được truyền một đối tượng

Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
41. Chức năng thiết lập có thể truy cập các thử nghiệm toàn cầu khi thuộc tính GLOBS của thử nghiệm được thông qua.

Các đối số tùy chọn là một từ điển chứa các biến toàn cầu ban đầu cho các thử nghiệm. Một bản sao mới của từ điển này được tạo cho mỗi bài kiểm tra. Theo mặc định, Quả cầu là một từ điển trống mới.

Đối số tùy chọn tùy chọn FILLAGS Chỉ định các tùy chọn DocTest mặc định cho các thử nghiệm, được tạo bởi các cờ tùy chọn riêng lẻ cùng nhau. Xem phần Cờ tùy chọn. Xem chức năng

Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
43 bên dưới để biết cách tốt hơn để đặt các tùy chọn báo cáo.Option Flags. See function
Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
43 below for a better way to set reporting options.

Trình phân tích cú pháp đối số tùy chọn chỉ định

>>> # comments are ignored
>>> x = 12
>>> x
12
>>> if x == 13:
...     print "yes"
... else:
...     print "no"
...     print "NO"
...     print "NO!!!"
...
no
NO
NO!!!
>>>
3 (hoặc lớp con) nên được sử dụng để trích xuất các thử nghiệm từ các tệp. Nó mặc định là một trình phân tích cú pháp bình thường (nghĩa là,
$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
98).

Mã hóa đối số tùy chọn Chỉ định một mã hóa nên được sử dụng để chuyển đổi tệp thành Unicode.

Mới trong phiên bản 2.4.

Đã thay đổi trong phiên bản 2.5: Toàn cầu

Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
46 đã được thêm vào Globals được cung cấp cho các tài liệu được tải từ một tệp văn bản bằng cách sử dụng
Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
47.The global
Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
46 was added to the globals provided to doctests loaded from a text file using
Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
47.

Thay đổi trong phiên bản 2.5: Mã hóa tham số đã được thêm vào.The parameter encoding was added.

Ghi chú

Không giống như

import doctest
doctest.testfile("example.txt")
7 và
Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
12, chức năng này tăng
$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
03 nếu mô -đun không chứa tài liệu. Bạn có thể ngăn chặn lỗi này bằng cách chuyển thể hiện
Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
12 dưới dạng đối số test_finder với đối số từ khóa EXCLUDE_EMPTY của nó được đặt thành
$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
22:

if __name__ == "__main__":
    import doctest
    doctest.testmod()
6

A([module][, globs][, extraglobs][, test_finder][, setUp][, tearDown][, checker])

Chuyển đổi các bài kiểm tra DocTest cho một mô -đun thành

Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
30.

Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
30 được trả lại sẽ được điều hành bởi khung công tác nhất và chạy từng tài liệu trong mô -đun. Nếu bất kỳ tài liệu nào thất bại, thì bài kiểm tra đơn vị được tổng hợp không thành công và ngoại lệ
Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
35 được nêu ra hiển thị tên của tệp chứa thử nghiệm và số dòng (đôi khi gần đúng).

Mô -đun đối số tùy chọn cung cấp mô -đun sẽ được kiểm tra. Nó có thể là một đối tượng mô -đun hoặc tên mô -đun (có thể là chấm). Nếu không được chỉ định, mô -đun gọi hàm này được sử dụng.

Các đối số tùy chọn là một từ điển chứa các biến toàn cầu ban đầu cho các thử nghiệm. Một bản sao mới của từ điển này được tạo cho mỗi bài kiểm tra. Theo mặc định, Quả cầu là một từ điển trống mới.

Đối số tùy chọn tùy chọn FILLAGS Chỉ định các tùy chọn DocTest mặc định cho các thử nghiệm, được tạo bởi các cờ tùy chọn riêng lẻ cùng nhau. Xem phần Cờ tùy chọn. Xem chức năng

Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
43 bên dưới để biết cách tốt hơn để đặt các tùy chọn báo cáo.

Trình phân tích cú pháp đối số tùy chọn chỉ định

>>> # comments are ignored
>>> x = 12
>>> x
12
>>> if x == 13:
...     print "yes"
... else:
...     print "no"
...     print "NO"
...     print "NO!!!"
...
no
NO
NO!!!
>>>
3 (hoặc lớp con) nên được sử dụng để trích xuất các thử nghiệm từ các tệp. Nó mặc định là một trình phân tích cú pháp bình thường (nghĩa là,
$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
98).

Mã hóa đối số tùy chọn Chỉ định một mã hóa nên được sử dụng để chuyển đổi tệp thành Unicode.

Mới trong phiên bản 2.3.

Đã thay đổi trong phiên bản 2.4: Các tham số Globs, Extraglobs, Test_Finder, Setup, Teardown và Tùy chọn đã được thêm vào; Hàm này hiện sử dụng cùng một kỹ thuật tìm kiếm như

import doctest
doctest.testfile("example.txt")
7.The parameters globs, extraglobs, test_finder, setUp, tearDown, and optionflags were added; this function now uses the same search technique as
import doctest
doctest.testfile("example.txt")
7.

Theo bìa,

Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
61 tạo ra
Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
30 trong các trường hợp
Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
63 và
Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
64 là một lớp con của
Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
65.
Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
64 được ghi lại ở đây (nó là một chi tiết nội bộ), nhưng nghiên cứu mã của nó có thể trả lời các câu hỏi về các chi tiết chính xác của tích hợp
Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
23.

Tương tự,

Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
47 tạo ra
Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
30 trong các trường hợp
Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
70 và
Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
71 là một lớp con của
Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
64.

Vì vậy, cả hai cách tạo ra một phiên bản

Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
30 chạy là
Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
64. Điều này rất quan trọng vì một lý do tinh tế: khi bạn tự chạy các chức năng, bạn có thể kiểm soát các tùy chọn
python -m doctest -v example.py
4 được sử dụng trực tiếp, bằng cách chuyển các cờ tùy chọn cho các chức năng
python -m doctest -v example.py
4. Tuy nhiên, nếu bạn đang viết khung
Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
23,
Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
23 cuối cùng sẽ kiểm soát khi nào và cách các bài kiểm tra chạy. Tác giả khung thường muốn kiểm soát các tùy chọn báo cáo
python -m doctest -v example.py
4 (có lẽ, ví dụ: được chỉ định bởi các tùy chọn dòng lệnh), nhưng không có cách nào để truyền các tùy chọn thông qua các vận động viên kiểm tra
Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
23 đến
python -m doctest -v example.py
4.

Vì lý do này,

python -m doctest -v example.py
4 cũng hỗ trợ một khái niệm về các cờ báo cáo
python -m doctest -v example.py
4 cụ thể cho hỗ trợ
Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
23, thông qua chức năng này:

________ 116 ________ 287 (cờ) ¶(flags)

Đặt cờ báo cáo

python -m doctest -v example.py
4 để sử dụng.

Cờ đối số hoặc các cờ tùy chọn cùng nhau. Xem phần Cờ tùy chọn. Chỉ có thể sử dụng cờ báo cáo của người Viking.Option Flags. Only “reporting flags” can be used.

Đây là cài đặt toàn cầu mô-đun và ảnh hưởng đến tất cả các tài liệu trong tương lai được thực hiện bởi mô-đun

Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
23: Phương pháp
Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
90 của
Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
64 xem các cờ tùy chọn được chỉ định cho trường hợp thử nghiệm khi phiên bản
Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
64 được xây dựng. Nếu không có cờ báo cáo nào được chỉ định (đó là trường hợp điển hình và dự kiến), các cờ báo cáo ____ 44 ____ ____223 được đặt vào các lá cờ tùy chọn và các cờ tùy chọn để tăng cường cho phiên bản
$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
67 được tạo để chạy tài liệu. Nếu bất kỳ lá cờ báo cáo nào được chỉ định khi phiên bản
Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
64 được xây dựng, ________ 44,
Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
23 cờ báo cáo bị bỏ qua.bitwise ORed into the option flags, and the option flags so augmented are passed to the
$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
67 instance created to run the doctest. If any reporting flags were specified when the
Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
64 instance was constructed,
python -m doctest -v example.py
4’s
Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
23 reporting flags are ignored.

Giá trị của các cờ báo cáo

Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
23 có hiệu lực trước khi hàm được gọi là được trả về bởi hàm.

Mới trong phiên bản 2.4.

25.2.6. API nâng caoAdvanced API¶

API cơ bản là một trình bao bọc đơn giản mà Lừa dự định làm cho tài liệu dễ sử dụng. Nó khá linh hoạt, và sẽ đáp ứng hầu hết các nhu cầu của người dùng; Tuy nhiên, nếu bạn yêu cầu kiểm soát chi tiết hơn đối với thử nghiệm hoặc muốn mở rộng các khả năng của DocTest, thì bạn nên sử dụng API nâng cao.

API nâng cao xoay quanh hai lớp container, được sử dụng để lưu trữ các ví dụ tương tác được trích xuất từ ​​các trường hợp tài liệu:

  • if __name__ == "__main__":
        import doctest
        doctest.testmod()
    
    00: Một câu lệnh Python duy nhất, được kết hợp với đầu ra dự kiến.statement, paired with its expected output.

  • Trying:
        factorial(1e100)
    Expecting:
        Traceback (most recent call last):
            ...
        OverflowError: n too large
    ok
    2 items passed all tests:
       1 tests in __main__
       8 tests in __main__.factorial
    9 tests in 2 items.
    9 passed and 0 failed.
    Test passed.
    $
    
    41: Bộ sưu tập
    if __name__ == "__main__":
        import doctest
        doctest.testmod()
    
    00s, thường được trích xuất từ ​​một tệp tài liệu hoặc văn bản duy nhất.

Các lớp xử lý bổ sung được xác định để tìm, phân tích và chạy và kiểm tra các ví dụ tài liệu:

  • Trying:
        factorial(1e100)
    Expecting:
        Traceback (most recent call last):
            ...
        OverflowError: n too large
    ok
    2 items passed all tests:
       1 tests in __main__
       8 tests in __main__.factorial
    9 tests in 2 items.
    9 passed and 0 failed.
    Test passed.
    $
    
    12: Tìm tất cả các tài liệu trong một mô -đun nhất định và sử dụng
    >>> # comments are ignored
    >>> x = 12
    >>> x
    12
    >>> if x == 13:
    ...     print "yes"
    ... else:
    ...     print "no"
    ...     print "NO"
    ...     print "NO!!!"
    ...
    no
    NO
    NO!!!
    >>>
    
    3 để tạo
    Trying:
        factorial(1e100)
    Expecting:
        Traceback (most recent call last):
            ...
        OverflowError: n too large
    ok
    2 items passed all tests:
       1 tests in __main__
       8 tests in __main__.factorial
    9 tests in 2 items.
    9 passed and 0 failed.
    Test passed.
    $
    
    41 từ mọi tài liệu có chứa các ví dụ tương tác.

  • >>> # comments are ignored
    >>> x = 12
    >>> x
    12
    >>> if x == 13:
    ...     print "yes"
    ... else:
    ...     print "no"
    ...     print "NO"
    ...     print "NO!!!"
    ...
    no
    NO
    NO!!!
    >>>
    
    3: Tạo đối tượng
    Trying:
        factorial(1e100)
    Expecting:
        Traceback (most recent call last):
            ...
        OverflowError: n too large
    ok
    2 items passed all tests:
       1 tests in __main__
       8 tests in __main__.factorial
    9 tests in 2 items.
    9 passed and 0 failed.
    Test passed.
    $
    
    41 từ một chuỗi (chẳng hạn như một đối tượng DocString DocString).

  • $ python example.py -v
    Trying:
        factorial(5)
    Expecting:
        120
    ok
    Trying:
        [factorial(n) for n in range(6)]
    Expecting:
        [1, 1, 2, 6, 24, 120]
    ok
    Trying:
        [factorial(long(n)) for n in range(6)]
    Expecting:
        [1, 1, 2, 6, 24, 120]
    ok
    
    67: Thực hiện các ví dụ trong
    Trying:
        factorial(1e100)
    Expecting:
        Traceback (most recent call last):
            ...
        OverflowError: n too large
    ok
    2 items passed all tests:
       1 tests in __main__
       8 tests in __main__.factorial
    9 tests in 2 items.
    9 passed and 0 failed.
    Test passed.
    $
    
    41 và sử dụng
    $ python example.py -v
    Trying:
        factorial(5)
    Expecting:
        120
    ok
    Trying:
        [factorial(n) for n in range(6)]
    Expecting:
        [1, 1, 2, 6, 24, 120]
    ok
    Trying:
        [factorial(long(n)) for n in range(6)]
    Expecting:
        [1, 1, 2, 6, 24, 120]
    ok
    
    66 để xác minh đầu ra của chúng.

  • $ python example.py -v
    Trying:
        factorial(5)
    Expecting:
        120
    ok
    Trying:
        [factorial(n) for n in range(6)]
    Expecting:
        [1, 1, 2, 6, 24, 120]
    ok
    Trying:
        [factorial(long(n)) for n in range(6)]
    Expecting:
        [1, 1, 2, 6, 24, 120]
    ok
    
    66: So sánh đầu ra thực tế từ một ví dụ tài liệu với đầu ra dự kiến ​​và quyết định xem chúng có khớp hay không.

Mối quan hệ giữa các lớp xử lý này được tóm tắt trong sơ đồ sau:

if __name__ == "__main__":
    import doctest
    doctest.testmod()
7

25.2.6.1. Đối tượng tài liệuDocTest Objects¶

Lớp ________ 116 ________ 313 (Ví dụ, Quả cầu, Tên, Tên tệp, Lineno, DocString) ¶(examples, globs, name, filename, lineno, docstring)

Một bộ sưu tập các ví dụ tài liệu nên được chạy trong một không gian tên duy nhất. Các đối số cấu trúc được sử dụng để khởi tạo các thuộc tính của cùng tên.

Mới trong phiên bản 2.4.

25.2.6. API nâng cao

API cơ bản là một trình bao bọc đơn giản mà Lừa dự định làm cho tài liệu dễ sử dụng. Nó khá linh hoạt, và sẽ đáp ứng hầu hết các nhu cầu của người dùng; Tuy nhiên, nếu bạn yêu cầu kiểm soát chi tiết hơn đối với thử nghiệm hoặc muốn mở rộng các khả năng của DocTest, thì bạn nên sử dụng API nâng cao.

API nâng cao xoay quanh hai lớp container, được sử dụng để lưu trữ các ví dụ tương tác được trích xuất từ ​​các trường hợp tài liệu:

if __name__ == "__main__":
    import doctest
    doctest.testmod()
00: Một câu lệnh Python duy nhất, được kết hợp với đầu ra dự kiến.

Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
41: Bộ sưu tập
if __name__ == "__main__":
    import doctest
    doctest.testmod()
00s, thường được trích xuất từ ​​một tệp tài liệu hoặc văn bản duy nhất.

Các lớp xử lý bổ sung được xác định để tìm, phân tích và chạy và kiểm tra các ví dụ tài liệu:

Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
12: Tìm tất cả các tài liệu trong một mô -đun nhất định và sử dụng
>>> # comments are ignored
>>> x = 12
>>> x
12
>>> if x == 13:
...     print "yes"
... else:
...     print "no"
...     print "NO"
...     print "NO!!!"
...
no
NO
NO!!!
>>>
3 để tạo
Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
41 từ mọi tài liệu có chứa các ví dụ tương tác.

>>> # comments are ignored
>>> x = 12
>>> x
12
>>> if x == 13:
...     print "yes"
... else:
...     print "no"
...     print "NO"
...     print "NO!!!"
...
no
NO
NO!!!
>>>
3: Tạo đối tượng
Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
41 từ một chuỗi (chẳng hạn như một đối tượng DocString DocString).

$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
67: Thực hiện các ví dụ trong
Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
41 và sử dụng
$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
66 để xác minh đầu ra của chúng.

________ 325¶

Số dòng trong

if __name__ == "__main__":
    import doctest
    doctest.testmod()
26 trong đó
Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
41 này bắt đầu hoặc
$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
88 nếu số dòng không có sẵn. Số dòng này dựa trên 0 đối với đầu tệp.

________ 329¶

Chuỗi mà thử nghiệm được trích xuất từ ​​hoặc

$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
88 nếu chuỗi không có sẵn hoặc nếu thử nghiệm không được trích xuất từ ​​một chuỗi.

25.2.6.2. Ví dụ đối tượngExample Objects¶

Lớp ________ 116 ________ 332 (nguồn, muốn [, exc_msg] [, lineno] [, thụt lề] [, tùy chọn]) ¶(source, want[, exc_msg][, lineno][, indent][, options])

Một ví dụ tương tác duy nhất, bao gồm một câu lệnh Python và đầu ra dự kiến ​​của nó. Các đối số cấu trúc được sử dụng để khởi tạo các thuộc tính của cùng tên.

Mới trong phiên bản 2.4.

if __name__ == "__main__":
    import doctest
    doctest.testmod()
00 Xác định các thuộc tính sau. Chúng được khởi tạo bởi hàm tạo và không nên được sửa đổi trực tiếp.

________ 334¶

Một chuỗi chứa mã nguồn ví dụ. Mã nguồn này bao gồm một câu lệnh Python duy nhất và luôn kết thúc bằng một dòng mới; Trình xây dựng thêm một dòng mới khi cần thiết.

________ 335¶

Đầu ra dự kiến ​​từ việc chạy mã nguồn ví dụ (từ stdout hoặc một dấu vết trong trường hợp ngoại lệ).

if __name__ == "__main__":
    import doctest
    doctest.testmod()
36 kết thúc bằng một dòng mới trừ khi không có đầu ra nào được mong đợi, trong trường hợp đó, nó là một chuỗi trống. Trình xây dựng thêm một dòng mới khi cần thiết.

________ 337¶

Thông báo ngoại lệ được tạo bởi ví dụ, nếu ví dụ dự kiến ​​sẽ tạo ra một ngoại lệ; hoặc

$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
88 nếu nó không được dự kiến ​​sẽ tạo ra một ngoại lệ. Thông báo ngoại lệ này được so sánh với giá trị trả về của
if __name__ == "__main__":
    import doctest
    doctest.testmod()
39.
if __name__ == "__main__":
    import doctest
    doctest.testmod()
40 kết thúc bằng một dòng mới trừ khi nó
$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
88. Trình xây dựng thêm một dòng mới nếu cần.

________ 325¶

Số dòng trong chuỗi chứa ví dụ này trong đó ví dụ bắt đầu. Số dòng này dựa trên 0 đối với đầu chuỗi chứa.

________ 343¶

Ví dụ, thụt lề trong chuỗi chứa, tức là, số lượng ký tự không gian đi trước dấu nhắc đầu tiên của ví dụ.

________ 344¶

Ánh xạ từ điển từ các cờ tùy chọn đến

$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
20 hoặc
$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
22, được sử dụng để ghi đè các tùy chọn mặc định cho ví dụ này. Bất kỳ cờ tùy chọn nào không có trong từ điển này đều được để lại ở giá trị mặc định của chúng (như được chỉ định bởi ____ 167 167
if __name__ == "__main__":
    import doctest
    doctest.testmod()
48). Theo mặc định, không có tùy chọn nào được đặt.

25.2.6.3. Đối tượng doctestfinderDocTestFinder objects¶

Lớp ________ 116 ________ 350 ([Verbose] [, trình phân tích cú pháp] [, Recurse] [, EXCLUDE_EMPTY])([verbose][, parser][, recurse][, exclude_empty])

Một lớp xử lý được sử dụng để trích xuất các

Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
41 có liên quan đến một đối tượng nhất định, từ tài liệu của nó và các tài liệu của các đối tượng chứa của nó.
Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
41S hiện có thể được trích xuất từ ​​các loại đối tượng sau: mô -đun, chức năng, lớp, phương thức, staticMethods, classMethods và thuộc tính.

Verbose đối số tùy chọn có thể được sử dụng để hiển thị các đối tượng được tìm kiếm bởi trình tìm kiếm. Nó mặc định là

$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
22 (không có đầu ra).

Trình phân tích cú pháp đối số tùy chọn chỉ định đối tượng

>>> # comments are ignored
>>> x = 12
>>> x
12
>>> if x == 13:
...     print "yes"
... else:
...     print "no"
...     print "NO"
...     print "NO!!!"
...
no
NO
NO!!!
>>>
3 (hoặc thay thế thả vào) được sử dụng để trích xuất các tài liệu từ DocStrings.

Nếu đối số tùy chọn phục hồi là sai, thì

if __name__ == "__main__":
    import doctest
    doctest.testmod()
55 sẽ chỉ kiểm tra đối tượng đã cho và không có bất kỳ đối tượng nào có.

Nếu đối số tùy chọn loại trừ_empty là sai, thì

if __name__ == "__main__":
    import doctest
    doctest.testmod()
55 sẽ bao gồm các thử nghiệm cho các đối tượng có tài liệu trống.

Mới trong phiên bản 2.4.

if __name__ == "__main__":
    import doctest
    doctest.testmod()
00 Xác định các thuộc tính sau. Chúng được khởi tạo bởi hàm tạo và không nên được sửa đổi trực tiếp.

________ 334¶(obj[, name][, module][, globs][, extraglobs])

Một chuỗi chứa mã nguồn ví dụ. Mã nguồn này bao gồm một câu lệnh Python duy nhất và luôn kết thúc bằng một dòng mới; Trình xây dựng thêm một dòng mới khi cần thiết.

________ 335¶

Đầu ra dự kiến ​​từ việc chạy mã nguồn ví dụ (từ stdout hoặc một dấu vết trong trường hợp ngoại lệ).

if __name__ == "__main__":
    import doctest
    doctest.testmod()
36 kết thúc bằng một dòng mới trừ khi không có đầu ra nào được mong đợi, trong trường hợp đó, nó là một chuỗi trống. Trình xây dựng thêm một dòng mới khi cần thiết.

  • ________ 337¶

  • Thông báo ngoại lệ được tạo bởi ví dụ, nếu ví dụ dự kiến ​​sẽ tạo ra một ngoại lệ; hoặc

    $ python example.py -v
    Trying:
        factorial(5)
    Expecting:
        120
    ok
    Trying:
        [factorial(n) for n in range(6)]
    Expecting:
        [1, 1, 2, 6, 24, 120]
    ok
    Trying:
        [factorial(long(n)) for n in range(6)]
    Expecting:
        [1, 1, 2, 6, 24, 120]
    ok
    
    88 nếu nó không được dự kiến ​​sẽ tạo ra một ngoại lệ. Thông báo ngoại lệ này được so sánh với giá trị trả về của
    if __name__ == "__main__":
        import doctest
        doctest.testmod()
    
    39.
    if __name__ == "__main__":
        import doctest
        doctest.testmod()
    
    40 kết thúc bằng một dòng mới trừ khi nó
    $ python example.py -v
    Trying:
        factorial(5)
    Expecting:
        120
    ok
    Trying:
        [factorial(n) for n in range(6)]
    Expecting:
        [1, 1, 2, 6, 24, 120]
    ok
    Trying:
        [factorial(long(n)) for n in range(6)]
    Expecting:
        [1, 1, 2, 6, 24, 120]
    ok
    
    88. Trình xây dựng thêm một dòng mới nếu cần.

  • Số dòng trong chuỗi chứa ví dụ này trong đó ví dụ bắt đầu. Số dòng này dựa trên 0 đối với đầu chuỗi chứa.

  • ________ 343¶

Ví dụ, thụt lề trong chuỗi chứa, tức là, số lượng ký tự không gian đi trước dấu nhắc đầu tiên của ví dụ.

________ 344¶

25.2.6.4. Đối tượng DocTestParserDocTestParser objects¶

Lớp ________ 116 ________ 371¶

Một lớp xử lý được sử dụng để trích xuất các ví dụ tương tác từ một chuỗi và sử dụng chúng để tạo đối tượng

Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
41.

Mới trong phiên bản 2.4.

>>> # comments are ignored
>>> x = 12
>>> x
12
>>> if x == 13:
...     print "yes"
... else:
...     print "no"
...     print "NO"
...     print "NO!!!"
...
no
NO
NO!!!
>>>
3 Xác định các phương thức sau:

________ 374 (Chuỗi, Quả cầu, Tên, Tên tệp, Lineno) ¶(string, globs, name, filename, lineno)

Trích xuất tất cả các ví dụ tài liệu từ chuỗi đã cho và thu thập chúng thành một đối tượng

Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
41.

Quả cầu, tên, tên tệp và lineno là các thuộc tính cho đối tượng

Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
41 mới. Xem tài liệu cho
Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
41 để biết thêm thông tin.

________ 378 (Chuỗi [, tên]) ¶(string[, name])

Trích xuất tất cả các ví dụ tài liệu từ chuỗi đã cho và trả về chúng dưới dạng danh sách các đối tượng

if __name__ == "__main__":
    import doctest
    doctest.testmod()
00. Số dòng dựa trên 0. Tên đối số tùy chọn là một tên xác định chuỗi này và chỉ được sử dụng cho các thông báo lỗi.

________ 380 (Chuỗi [, tên]) ¶(string[, name])

Chia chuỗi đã cho thành các ví dụ và can thiệp văn bản, và trả lại chúng làm danh sách các chuỗi và chuỗi xen kẽ. Số dòng cho

if __name__ == "__main__":
    import doctest
    doctest.testmod()
00 dựa trên 0. Tên đối số tùy chọn là một tên xác định chuỗi này và chỉ được sử dụng cho các thông báo lỗi.

25.2.6.5. Đối tượng doctestrunnerDocTestRunner objects¶

Lớp ________ 116 ________ 384 ([Checker] [, Verbose] [, Tùy chọnflags]) ¶([checker][, verbose][, optionflags])

Một lớp xử lý được sử dụng để thực thi và xác minh các ví dụ tương tác trong

Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
41.

Việc so sánh giữa các đầu ra dự kiến ​​và đầu ra thực tế được thực hiện bởi một

$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
66. So sánh này có thể được tùy chỉnh với một số cờ tùy chọn; Xem phần Cờ tùy chọn để biết thêm thông tin. Nếu các cờ tùy chọn không đủ, thì so sánh cũng có thể được tùy chỉnh bằng cách chuyển một lớp con là
$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
66 cho hàm tạo.Option Flags for more information. If the option flags are insufficient, then the comparison may also be customized by passing a subclass of
$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
66 to the constructor.

Đầu ra hiển thị của Runner Runner có thể được kiểm soát theo hai cách. Đầu tiên, một hàm đầu ra có thể được chuyển đến

if __name__ == "__main__":
    import doctest
    doctest.testmod()
88; Hàm này sẽ được gọi với các chuỗi nên được hiển thị. Nó mặc định là
if __name__ == "__main__":
    import doctest
    doctest.testmod()
89. Nếu việc nắm bắt đầu ra là không đủ, thì đầu ra hiển thị cũng có thể được tùy chỉnh bằng cách phân lớp doctestrunner và ghi đè các phương thức
if __name__ == "__main__":
    import doctest
    doctest.testmod()
90,
if __name__ == "__main__":
    import doctest
    doctest.testmod()
91,
if __name__ == "__main__":
    import doctest
    doctest.testmod()
92 và
if __name__ == "__main__":
    import doctest
    doctest.testmod()
93.

Trình kiểm tra đối số từ khóa tùy chọn chỉ định đối tượng

$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
66 (hoặc thay thế thả vào) nên được sử dụng để so sánh các đầu ra dự kiến ​​với các đầu ra thực tế của các ví dụ tài liệu.

Verbose đối số từ khóa tùy chọn kiểm soát tính độ dài của ____ 167. Nếu Verbose là

$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
20, thì thông tin được in về mỗi ví dụ, vì nó được chạy. Nếu dài dòng là
$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
22, thì chỉ có lỗi được in. Nếu verbose không xác định hoặc
$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
88, thì đầu ra của verbose được sử dụng IFF, công tắc dòng lệnh
python -m doctest -v example.py
7 được sử dụng.

Tùy chọn từ khóa tùy chọn tùy chọn có thể được sử dụng để kiểm soát cách người chạy thử so sánh đầu ra dự kiến ​​với đầu ra thực tế và cách nó hiển thị lỗi. Để biết thêm thông tin, xem phần Tùy chọn Cờ.Option Flags.

Mới trong phiên bản 2.4.

>>> # comments are ignored
>>> x = 12
>>> x
12
>>> if x == 13:
...     print "yes"
... else:
...     print "no"
...     print "NO"
...     print "NO!!!"
...
no
NO
NO!!!
>>>
3 Xác định các phương thức sau:

________ 374 (Chuỗi, Quả cầu, Tên, Tên tệp, Lineno) ¶(out, test, example)

Trích xuất tất cả các ví dụ tài liệu từ chuỗi đã cho và thu thập chúng thành một đối tượng

Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
41.

Quả cầu, tên, tên tệp và lineno là các thuộc tính cho đối tượng

Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
41 mới. Xem tài liệu cho
Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
41 để biết thêm thông tin.

________ 378 (Chuỗi [, tên]) ¶(out, test, example, got)

Trích xuất tất cả các ví dụ tài liệu từ chuỗi đã cho và trả về chúng dưới dạng danh sách các đối tượng

if __name__ == "__main__":
    import doctest
    doctest.testmod()
00. Số dòng dựa trên 0. Tên đối số tùy chọn là một tên xác định chuỗi này và chỉ được sử dụng cho các thông báo lỗi.

________ 380 (Chuỗi [, tên]) ¶

Chia chuỗi đã cho thành các ví dụ và can thiệp văn bản, và trả lại chúng làm danh sách các chuỗi và chuỗi xen kẽ. Số dòng cho
if __name__ == "__main__":
    import doctest
    doctest.testmod()
00 dựa trên 0. Tên đối số tùy chọn là một tên xác định chuỗi này và chỉ được sử dụng cho các thông báo lỗi.(out, test, example, got)

25.2.6.5. Đối tượng doctestrunner

________ 380 (Chuỗi [, tên]) ¶

Chia chuỗi đã cho thành các ví dụ và can thiệp văn bản, và trả lại chúng làm danh sách các chuỗi và chuỗi xen kẽ. Số dòng cho
if __name__ == "__main__":
    import doctest
    doctest.testmod()
00 dựa trên 0. Tên đối số tùy chọn là một tên xác định chuỗi này và chỉ được sử dụng cho các thông báo lỗi.(out, test, example, exc_info)

25.2.6.5. Đối tượng doctestrunner

Lớp ________ 116 ________ 384 ([Checker] [, Verbose] [, Tùy chọnflags]) ¶

Một lớp xử lý được sử dụng để thực thi và xác minh các ví dụ tương tác trong
Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
41.(test[, compileflags][, out][, clear_globs])

Việc so sánh giữa các đầu ra dự kiến ​​và đầu ra thực tế được thực hiện bởi một

$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
66. So sánh này có thể được tùy chỉnh với một số cờ tùy chọn; Xem phần Cờ tùy chọn để biết thêm thông tin. Nếu các cờ tùy chọn không đủ, thì so sánh cũng có thể được tùy chỉnh bằng cách chuyển một lớp con là
$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
66 cho hàm tạo.

Các ví dụ được chạy trong không gian tên

python -m doctest -v example.py
16. Nếu Clear_Globs là đúng (mặc định), thì không gian tên này sẽ được xóa sau khi chạy thử, để giúp thu thập rác. Nếu bạn muốn kiểm tra không gian tên sau khi kiểm tra hoàn thành, thì hãy sử dụng Clear_Globs = False.

CompileFlags cung cấp cho tập hợp các cờ nên được sử dụng bởi trình biên dịch Python khi chạy các ví dụ. Nếu không được chỉ định, thì nó sẽ mặc định cho tập hợp các cờ nhập tương lai áp dụng cho các quả cầu.

Đầu ra của mỗi ví dụ được kiểm tra bằng trình kiểm tra đầu ra ____ 167 và kết quả được định dạng bằng các phương thức

python -m doctest -v example.py
18.

________ 419 ([Verbose]) ¶([verbose])

In một bản tóm tắt tất cả các trường hợp thử nghiệm đã được điều hành bởi DocTestrunner này và trả lại một Tuple

python -m doctest -v example.py
20 có tên.named tuple
python -m doctest -v example.py
20.

Đối số dài dòng tùy chọn kiểm soát mức độ chi tiết của bản tóm tắt. Nếu độ mâu thuẫn không được chỉ định, thì độ verbosity ____ 167 được sử dụng.

Đã thay đổi trong phiên bản 2.6: Sử dụng một tuple có tên.Use a named tuple.

25.2.6.6. OutputChecker Đối tượngOutputChecker objects¶

Lớp ________ 116 ________ 423¶

Một lớp được sử dụng để kiểm tra xem đầu ra thực tế từ một ví dụ tài liệu có phù hợp với đầu ra dự kiến ​​hay không.

$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
66 định nghĩa hai phương pháp:
python -m doctest -v example.py
25, so sánh một cặp đầu ra nhất định và trả về đúng nếu chúng khớp; và
python -m doctest -v example.py
26, trả về một chuỗi mô tả sự khác biệt giữa hai đầu ra.

Mới trong phiên bản 2.4.

$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
66 Xác định các phương thức sau:

________ 428 (muốn, có, tùy chọn)(want, got, optionflags)

Trả về

$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
20 IFF Đầu ra thực tế từ một ví dụ (GOT) khớp với đầu ra dự kiến ​​(Want). Những chuỗi này luôn được coi là phù hợp nếu chúng giống hệt nhau; Nhưng tùy thuộc vào những cờ tùy chọn mà người chạy thử đang sử dụng, một số loại đối sánh không chính thức cũng có thể. Xem phần Cờ tùy chọn để biết thêm thông tin về các cờ tùy chọn.Option Flags for more information about option flags.

________ 430 (ví dụ, GOT, Tùy chọn)(example, got, optionflags)

Trả về một chuỗi mô tả sự khác biệt giữa đầu ra dự kiến ​​cho một ví dụ đã cho (ví dụ) và đầu ra thực tế (GOT). Tùy chọnFlags là tập hợp các cờ tùy chọn được sử dụng để so sánh muốn và có.

25.2.7. Gỡ lỗiDebugging¶

DocTest cung cấp một số cơ chế để gỡ lỗi các ví dụ về tài liệu:

  • Một số chức năng chuyển đổi tài liệu thành các chương trình Python có thể thực thi, có thể được chạy theo trình gỡ lỗi Python,

    python -m doctest -v example.py
    
    31.

  • Lớp

    python -m doctest -v example.py
    
    32 là một lớp con của
    $ python example.py -v
    Trying:
        factorial(5)
    Expecting:
        120
    ok
    Trying:
        [factorial(n) for n in range(6)]
    Expecting:
        [1, 1, 2, 6, 24, 120]
    ok
    Trying:
        [factorial(long(n)) for n in range(6)]
    Expecting:
        [1, 1, 2, 6, 24, 120]
    ok
    
    67 làm tăng một ngoại lệ cho ví dụ thất bại đầu tiên, chứa thông tin về ví dụ đó. Thông tin này có thể được sử dụng để thực hiện gỡ lỗi sau khi chết trên ví dụ.

  • Các trường hợp

    Trying:
        factorial(1e100)
    Expecting:
        Traceback (most recent call last):
            ...
        OverflowError: n too large
    ok
    2 items passed all tests:
       1 tests in __main__
       8 tests in __main__.factorial
    9 tests in 2 items.
    9 passed and 0 failed.
    Test passed.
    $
    
    23 được tạo bởi
    Trying:
        factorial(1e100)
    Expecting:
        Traceback (most recent call last):
            ...
        OverflowError: n too large
    ok
    2 items passed all tests:
       1 tests in __main__
       8 tests in __main__.factorial
    9 tests in 2 items.
    9 passed and 0 failed.
    Test passed.
    $
    
    61 hỗ trợ phương pháp
    python -m doctest -v example.py
    
    36 được xác định bởi
    Trying:
        factorial(1e100)
    Expecting:
        Traceback (most recent call last):
            ...
        OverflowError: n too large
    ok
    2 items passed all tests:
       1 tests in __main__
       8 tests in __main__.factorial
    9 tests in 2 items.
    9 passed and 0 failed.
    Test passed.
    $
    
    65.

  • Bạn có thể thêm một cuộc gọi đến

    python -m doctest -v example.py
    
    38 trong một ví dụ về tài liệu và bạn sẽ rơi vào trình gỡ lỗi Python khi dòng đó được thực thi. Sau đó, bạn có thể kiểm tra các giá trị hiện tại của các biến, v.v. Ví dụ: giả sử
    python -m doctest -v example.py
    
    39 chỉ chứa tài liệu mô -đun này:

    if __name__ == "__main__":
        import doctest
        doctest.testmod()
    
    8

    Sau đó, một phiên Python tương tác có thể trông như thế này:

    if __name__ == "__main__":
        import doctest
        doctest.testmod()
    
    9

    Thay đổi trong phiên bản 2.4: Khả năng sử dụng

    python -m doctest -v example.py
    
    38 hữu ích bên trong tài liệu đã được thêm vào.The ability to use
    python -m doctest -v example.py
    
    38 usefully inside doctests was added.

Các chức năng chuyển đổi tài liệu thành mã Python và có thể chạy mã tổng hợp theo trình gỡ lỗi:

________ 116 ________ 442 (s) ¶(s)

Chuyển đổi văn bản với các ví dụ thành một tập lệnh.

Đối số S là một chuỗi chứa các ví dụ tài liệu. Chuỗi được chuyển đổi thành tập lệnh Python, trong đó các ví dụ tài liệu trong s được chuyển đổi thành mã thông thường và mọi thứ khác được chuyển đổi thành các bình luận của Python. Tập lệnh được tạo được trả về dưới dạng chuỗi. Ví dụ,

python -m doctest -v example.py
0

displays:

python -m doctest -v example.py
1

Hàm này được sử dụng bên trong bởi các chức năng khác (xem bên dưới), nhưng cũng có thể hữu ích khi bạn muốn chuyển đổi phiên Python tương tác thành tập lệnh Python.

Mới trong phiên bản 2.4.

$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
66 Xác định các phương thức sau:(module, name)

________ 428 (muốn, có, tùy chọn)

Trả về

$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
20 IFF Đầu ra thực tế từ một ví dụ (GOT) khớp với đầu ra dự kiến ​​(Want). Những chuỗi này luôn được coi là phù hợp nếu chúng giống hệt nhau; Nhưng tùy thuộc vào những cờ tùy chọn mà người chạy thử đang sử dụng, một số loại đối sánh không chính thức cũng có thể. Xem phần Cờ tùy chọn để biết thêm thông tin về các cờ tùy chọn.

python -m doctest -v example.py
2

________ 430 (ví dụ, GOT, Tùy chọn)

Trả về một chuỗi mô tả sự khác biệt giữa đầu ra dự kiến ​​cho một ví dụ đã cho (ví dụ) và đầu ra thực tế (GOT). Tùy chọnFlags là tập hợp các cờ tùy chọn được sử dụng để so sánh muốn và có.

25.2.7. Gỡ lỗi(module, name[, pm])

DocTest cung cấp một số cơ chế để gỡ lỗi các ví dụ về tài liệu:

Một số chức năng chuyển đổi tài liệu thành các chương trình Python có thể thực thi, có thể được chạy theo trình gỡ lỗi Python,

python -m doctest -v example.py
31.

A shallow copy of

python -m doctest -v example.py
53 is used for both local and global execution context.

Optional argument pm controls whether post-mortem debugging is used. If pm has a true value, the script file is run directly, and the debugger gets involved only if the script terminates via raising an unhandled exception. If it does, then post-mortem debugging is invoked, via

python -m doctest -v example.py
54, passing the traceback object from the unhandled exception. If pm is not specified, or is false, the script is run under the debugger from the start, via passing an appropriate
python -m doctest -v example.py
55 call to
python -m doctest -v example.py
56.

New in version 2.3.

Changed in version 2.4: The pm argument was added.

$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
16
python -m doctest -v example.py
58(src[, pm][, globs])

Debug the doctests in a string.

This is like function

python -m doctest -v example.py
36 above, except that a string containing doctest examples is specified directly, via the src argument.

Optional argument pm has the same meaning as in function

python -m doctest -v example.py
36 above.

Optional argument globs gives a dictionary to use as both local and global execution context. If not specified, or

$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
88, an empty dictionary is used. If specified, a shallow copy of the dictionary is used.

New in version 2.4.

The

python -m doctest -v example.py
32 class, and the special exceptions it may raise, are of most interest to testing framework authors, and will only be sketched here. See the source code, and especially
python -m doctest -v example.py
32’s docstring (which is a doctest!) for more details:

class
$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
16
python -m doctest -v example.py
65([checker][, verbose][, optionflags])

A subclass of

$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
67 that raises an exception as soon as a failure is encountered. If an unexpected exception occurs, an
python -m doctest -v example.py
67 exception is raised, containing the test, the example, and the original exception. If the output doesn’t match, then a
python -m doctest -v example.py
68 exception is raised, containing the test, the example, and the actual output.

For information about the constructor parameters and methods, see the documentation for

$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
67 in section Advanced API.

There are two exceptions that may be raised by

python -m doctest -v example.py
32 instances:

exception
$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
16
python -m doctest -v example.py
72(test, example, got)

An exception raised by

$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
67 to signal that a doctest example’s actual output did not match its expected output. The constructor arguments are used to initialize the attributes of the same names.

python -m doctest -v example.py
68 defines the following attributes:

python -m doctest -v example.py
75
python -m doctest -v example.py
76¶

The

Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
41 object that was being run when the example failed.

python -m doctest -v example.py
75
python -m doctest -v example.py
79¶

The

if __name__ == "__main__":
    import doctest
    doctest.testmod()
00 that failed.

python -m doctest -v example.py
75
python -m doctest -v example.py
82¶

The example’s actual output.

exception
$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
16
python -m doctest -v example.py
84(test, example, exc_info)

An exception raised by

$ python example.py -v
Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    [factorial(long(n)) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
67 to signal that a doctest example raised an unexpected exception. The constructor arguments are used to initialize the attributes of the same names.

python -m doctest -v example.py
67 defines the following attributes:

python -m doctest -v example.py
87
python -m doctest -v example.py
76¶

The

Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
2 items passed all tests:
   1 tests in __main__
   8 tests in __main__.factorial
9 tests in 2 items.
9 passed and 0 failed.
Test passed.
$
41 object that was being run when the example failed.

python -m doctest -v example.py
87
python -m doctest -v example.py
79¶

The

if __name__ == "__main__":
    import doctest
    doctest.testmod()
00 that failed.

python -m doctest -v example.py
87
python -m doctest -v example.py
94¶

A tuple containing information about the unexpected exception, as returned by

python -m doctest -v example.py
12.

25.2.8. Soapbox¶

As mentioned in the introduction,

python -m doctest -v example.py
4 has grown to have three primary uses:

  1. Checking examples in docstrings.

  2. Regression testing.

  3. Executable documentation / literate testing.

These uses have different requirements, and it is important to distinguish them. In particular, filling your docstrings with obscure test cases makes for bad documentation.

When writing a docstring, choose docstring examples with care. There’s an art to this that needs to be learned—it may not be natural at first. Examples should add genuine value to the documentation. A good example can often be worth many words. If done with care, the examples will be invaluable for your users, and will pay back the time it takes to collect them many times over as the years go by and things change. I’m still amazed at how often one of my

python -m doctest -v example.py
4 examples stops working after a “harmless” change.

Doctest also makes an excellent tool for regression testing, especially if you don’t skimp on explanatory text. By interleaving prose and examples, it becomes much easier to keep track of what’s actually being tested, and why. When a test fails, good prose can make it much easier to figure out what the problem is, and how it should be fixed. It’s true that you could write extensive comments in code-based testing, but few programmers do. Many have found that using doctest approaches instead leads to much clearer tests. Perhaps this is simply because doctest makes writing prose a little easier than writing code, while writing comments in code is a little harder. I think it goes deeper than just that: the natural attitude when writing a doctest-based test is that you want to explain the fine points of your software, and illustrate them with examples. This in turn naturally leads to test files that start with the simplest features, and logically progress to complications and edge cases. A coherent narrative is the result, instead of a collection of isolated functions that test isolated bits of functionality seemingly at random. It’s a different attitude, and produces different results, blurring the distinction between testing and explaining.

Kiểm tra hồi quy được giới hạn tốt nhất cho các đối tượng hoặc tệp chuyên dụng. Có một số tùy chọn để tổ chức các bài kiểm tra:

  • Viết các tệp văn bản có chứa các trường hợp kiểm tra dưới dạng ví dụ tương tác và kiểm tra các tệp bằng

    The ``example`` module
    ======================
    
    Using ``factorial``
    -------------------
    
    This is an example text file in reStructuredText format.  First import
    ``factorial`` from the ``example`` module:
    
        >>> from example import factorial
    
    Now use it:
    
        >>> factorial(6)
        120
    
    6 hoặc
    Trying:
        factorial(1e100)
    Expecting:
        Traceback (most recent call last):
            ...
        OverflowError: n too large
    ok
    2 items passed all tests:
       1 tests in __main__
       8 tests in __main__.factorial
    9 tests in 2 items.
    9 passed and 0 failed.
    Test passed.
    $
    
    47. Điều này được khuyến nghị, mặc dù là dễ dàng nhất để thực hiện cho các dự án mới, được thiết kế từ đầu để sử dụng DocTest.

  • Xác định các chức năng có tên

    import doctest
    doctest.testfile("example.txt")
    
    00 bao gồm các tài liệu đơn lẻ, chứa các trường hợp kiểm tra cho các chủ đề được đặt tên. Các chức năng này có thể được bao gồm trong cùng một tệp với mô -đun hoặc được phân tách thành một tệp kiểm tra riêng.

  • Xác định bản đồ từ điển

    import doctest
    doctest.testfile("example.txt")
    
    01 từ các chủ đề kiểm tra hồi quy đến các tài liệu có chứa các trường hợp thử nghiệm.

Khi bạn đã đặt các bài kiểm tra của mình vào một mô -đun, mô -đun có thể là người chạy thử nghiệm. Khi một bài kiểm tra thất bại, bạn có thể sắp xếp cho người chạy thử nghiệm của mình để chỉ chạy lại tài liệu thất bại trong khi bạn gỡ lỗi vấn đề. Dưới đây là một ví dụ tối thiểu về một người chạy thử như vậy:

python -m doctest -v example.py
3

Chú thích

1

Các ví dụ có chứa cả đầu ra dự kiến ​​và một ngoại lệ không được hỗ trợ. Cố gắng đoán nơi một kết thúc và người kia bắt đầu quá dễ bị lỗi, và điều đó cũng làm cho một bài kiểm tra khó hiểu.