Python 2.7 如何使pytest触发的doctest忽略unicode前缀'u'';`弦乐?

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

我希望我的代码能够在Python2和Python3中工作。我使用博士和博士学位

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())