Doctest不承认__future __。师

时间:2016-02-28 09:18:43

标签: python future division doctest

我有以下doctest编写x.doctest

This is something:

    >>> x = 3 + 4

foo bar something else:

    >>> from __future__ import division
    >>> y = 15
    >>> z = int('24')
    >>> m = z / y
    >>> print (m)
    1.6

但是当我在python 2.7.11上运行python -m doctest x.doctest时,doctest无法识别from __future__ import division

**********************************************************************
File "x.doctest", line 11, in x.doctest
Failed example:
    print (m)
Expected:
    1.6
Got:
    1
**********************************************************************
1 items had failures:
   1 of   6 in x.doctest
***Test Failed*** 1 failures.

即使我将未来的import语句转移到第一行:

This is something:

    >>> from __future__ import division
    >>> x = 3 + 4

foo bar something else:

    >>> y = 15
    >>> z = int('24')
    >>> m = z / y
    >>> print (m)
    1.6

doctest仍然失败:

**********************************************************************
File "x.doctest", line 11, in x.doctest
Failed example:
    print (m)
Expected:
    1.6
Got:
    1
**********************************************************************
1 items had failures:
   1 of   6 in x.doctest
***Test Failed*** 1 failures.

为什么会这样,我该如何解决?

doctest是否有标记/选项,要求确保from __future__ import division被识别?

注意:我可以强行检查print (int(m))y = 15.,doctest会通过,但这不是理想的。

2 个答案:

答案 0 :(得分:3)

Doctests通过Python编译器以隔离运行每一行。这意味着在doctest本身中使用from __future__ import ..语句指定的任何编译器标志在doctest中都是无用的。

但是,您可以将真实__future__ module中的名称添加到您的doctest全局变量中。如果您使用from __future__ import <name>格式,而是使用import __future__,则导入该实际模块,并可以向doctest {{1添加对其定义的对象的引用}或globs词典:

extraglobs

if __name__ == "__main__": import doctest import __future__ doctest.testmod(extraglobs={'division': __future__.division}) 将在编译各个行时为您设置正确的编译器标志。

演示:

DocTestRunner

答案 1 :(得分:1)

您可以使用选项-Q作为Python解释器。将其设置为new

python -Qnew -m doctest x.doctest

使用以下命令获取有关Python命令行选项的帮助:

python -h

选择输出:

  

-Q arg:除法选项:-Qold(默认值),-Qwarn,-Qwarnall,-Qnew

更多帮助详情here