首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Doctest不承认__future__.division

Doctest不承认__future__.division
EN

Stack Overflow用户
提问于 2016-02-28 09:18:43
回答 2查看 233关注 0票数 8

我有下面的博士考试写的x.doctest

代码语言:javascript
复制
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

但是当我在python2.7.11上运行python -m doctest x.doctest时,doctest没有识别出from __future__ import division

代码语言:javascript
复制
**********************************************************************
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语句移到第一行时:

代码语言:javascript
复制
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

博士考试仍然失败:

代码语言:javascript
复制
**********************************************************************
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将通过,但这并不理想。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-05 07:36:40

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

但是,您可以将真实模块中的名称添加到doctest全局文件中。如果您不使用from __future__ import <name>格式,而是使用import __future__,则导入实际模块,并且可以将对它定义的对象的引用添加到doctest globsextraglobs字典:

代码语言:javascript
复制
 if __name__ == "__main__":
     import doctest
     import __future__
     doctest.testmod(extraglobs={'division': __future__.division})

然后,DocTestRunner将在编译这些行时为您设置正确的编译器标志。

演示:

代码语言:javascript
复制
>>> import doctest
>>> import __future__
>>> import sys
>>> def foo():
...     """
...     >>> 1 / 2
...     0.5
...     """
...
>>> doctest.testmod(sys.modules['__main__'])
**********************************************************************
File "__main__", line 3, in __main__.foo
Failed example:
    1 / 2
Expected:
    0.5
Got:
    0
**********************************************************************
1 items had failures:
   1 of   1 in __main__.foo
***Test Failed*** 1 failures.
TestResults(failed=1, attempted=1)
>>> doctest.testmod(sys.modules['__main__'], extraglobs={'division': __future__.division})
TestResults(failed=0, attempted=1)
票数 4
EN

Stack Overflow用户

发布于 2016-02-28 09:49:44

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

代码语言:javascript
复制
python -Qnew -m doctest x.doctest

获取有关Python命令行选项的帮助:

代码语言:javascript
复制
python -h

选定产出:

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

更多帮助详细信息这里

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35680715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档