我有以下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会通过,但这不是理想的。
答案 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。