gpt4 book ai didi

python - Doctest 无法识别 __future__.division

转载 作者:太空狗 更新时间:2023-10-29 21:06:55 29 4
gpt4 key购买 nike

我编写了以下 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.

即使我将 future 的导入语句移到第一行:

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 将通过,但这不是那么理想。

最佳答案

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

但是,您可以添加来自真实 __future__ module 的名称到你的 doctest 全局变量。如果您使用from __future__ import <name>格式但使用 import __future__相反,您导入该实际模块,并可以将对它定义的对象的引用添加到 doctest globsextraglobs字典:

 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)

关于python - Doctest 无法识别 __future__.division,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35680715/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com