我希望我的代码可以在Python 2和3中使用。我使用doctests和
from __future__ import unicode_literals
我是否可以设置一个标志/插件,使其忽略Python 2具有unicode字符串的u
前缀?
一个在Python 3中有效但在Python 2中失败的测试:
Expected:
'Me \\& you.'
Got:
u'Me \\& you.'
from __future__ import unicode_literals
def foo():
"""
Returns
-------
unicode - for Python 2 and Python 3
Examples
--------
>>> foo()
'bar'
"""
return 'bar'
if __name__ == '__main__':
import doctest
doctest.testmod()
答案 0 :(得分:0)
如果您直接使用doctest,则可以按照Dirkjan Ochtman的博客文章Single-source Python 2/3 doctests覆盖OutputChecker:
class Py23DocChecker(doctest.OutputChecker):
def check_output(self, want, got, optionflags):
if sys.version_info[0] > 2:
want = re.sub("u'(.*?)'", "'\\1'", want)
want = re.sub('u"(.*?)"', '"\\1"', want)
return doctest.OutputChecker.check_output(self, want, got, optionflags)
doctest.DocTestSuite(mod, checker=Py23DocChecker())
如果您使用的是py.test,则可以在pytest.ini中指定doctest_optionflags = ALLOW_UNICODE
。参见https://docs.pytest.org/en/latest/doctest.html