我有下面的博士考试写的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但是当我在python2.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博士考试仍然失败:
**********************************************************************
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将通过,但这并不理想。
发布于 2016-04-05 07:36:40
Doctest通过Python编译器隔离地运行每一行。这意味着,在doctest中使用from __future__ import ..语句指定的任何编译器标志在doctest中都是无用的。
但是,您可以将真实模块中的名称添加到doctest全局文件中。如果您不使用from __future__ import <name>格式,而是使用import __future__,则导入实际模块,并且可以将对它定义的对象的引用添加到doctest globs或extraglobs字典:
if __name__ == "__main__":
import doctest
import __future__
doctest.testmod(extraglobs={'division': __future__.division})然后,DocTestRunner将在编译这些行时为您设置正确的编译器标志。
演示:
>>> 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)发布于 2016-02-28 09:49:44
您可以为Python解释器使用选项-Q。将其设置为new:
python -Qnew -m doctest x.doctest获取有关Python命令行选项的帮助:
python -h选定产出:
-Q arg :除法选项:-Qold (默认)、-Qwarn、-Qwarnall、-Qnew
更多帮助详细信息这里。
https://stackoverflow.com/questions/35680715
复制相似问题