Python 2.7 如何使pytest触发的doctest忽略unicode前缀'u'';`弦乐?
我希望我的代码能够在Python2和Python3中工作。我使用博士和博士学位Python 2.7 如何使pytest触发的doctest忽略unicode前缀'u'';`弦乐?,python-2.7,unicode,pytest,doctest,Python 2.7,Unicode,Pytest,Doctest,我希望我的代码能够在Python2和Python3中工作。我使用博士和博士学位 from __future__ import unicode_literals 是否有一个我可以设置的标志/a插件使其忽略Python2具有unicode字符串的u前缀 例子 一个在Python 3中工作但在Python 2中失败的测试: Expected: 'Me \\& you.' Got: u'Me \\& you.' 最小示例 如果您直接使用doctest,可以根据Dirk
from __future__ import unicode_literals
是否有一个我可以设置的标志/a插件使其忽略Python2具有unicode字符串的u
前缀
例子
一个在Python 3中工作但在Python 2中失败的测试:
Expected:
'Me \\& you.'
Got:
u'Me \\& you.'
最小示例
如果您直接使用doctest,可以根据Dirkjan Ochtman的博文覆盖OutputChecker:
如果您使用的是py.test,那么可以在pytest.ini中指定
doctest\u optionflags=ALLOW\u UNICODE
。请参见在这种情况下,问题可能不是“u前缀”,而是“…”
是与u“…”
不同的类型。比较失败是因为您正在测试str
值与unicode
值。因为u“Me\\&you.
而不是u'Me\\&you.
它也会失败。我确信doctests会直接比较字符串。请提供一个最小的示例来重现此问题。好吧,unicode\u文本
意味着隐含的所有文本都是u'
文本。我认为这不适用于DOCTUM,因为在DoScript中写入的值不是文字的(它是字面上的文字),而DOCTUM不考虑导入的<代码> UnoDeIX文字< /COD>。如果将预期值声明为u'bar'
,则有效。@deceze否,将预期值声明为u'bar'
无效。问题是我希望它在Python 2和Python 3上运行,正如我在问题的第一句中所写的那样。
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()
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())