考虑以下演示脚本:
# -*- coding: utf-8 -*-
from __future__ import division
from __future__ import unicode_literals
def myDivi():
"""
This is a small demo that just returns the output of a divison.
>>> myDivi()
0.5
"""
return 1/2
def myUnic():
"""
This is a small demo that just returns a string.
>>> myUnic()
'abc'
"""
return 'abc'
if __name__ == "__main__":
import doctest
extraglobs = {}
doctest.testmod(extraglobs=extraglobs)
doctest 在 Python 3.5 上通过,但在 Python 2.7.9 上失败。
奇怪的是,除法测试有效,但 unicode 测试失败。
我看到了各种问题,包括以下
- 对 Python 文档测试的多版本支持
- Doctest 无法识别 __future__.division
- Python:在 doctests 中接受 unicode 字符串作为常规字符串
- Python doctests 和 unicode
- 由于 unicode 领先 u,Doctest 失败
但它们都有些不同(例如它们已经过时(指 Py 2.6 或 Py 3.0),import 语句在 doctest 中而不是全局中,使用 pytest 而不是标准 doctest,切换到不同的 assert 等)
不过,我尝试了各种替代方案基于这些问题,包括例如
if __name__ == "__main__":
import doctest
import __future__
extraglobs = {'unicode_literals': __future__.unicode_literals}
doctest.testmod(extraglobs=extraglobs)
或者
def myUnic():
"""
This is a small demo that just returns a string.
>>> myUnic()
u'abc' # doctest: +ALLOW_UNICODE
"""
return 'abc'
但它仍然无法正常工作,无论是在 Python 2 还是 3 上或给出其他错误。
有没有办法让它在 3.5+ 和 2.7.9+ 上都通过,而没有丑陋的黑客?我还使用这些文档字符串来生成文档,所以我更愿意或多或少地保留它们。