Python doctests的多版本支持

Irf*_*fan 10 python doctest python-3.x

我正在写这样的doctests:

>>> some_function(a=1, b=2)
{u'id': u'123', u'name': u'abc'}
Run Code Online (Sandbox Code Playgroud)

这适用于Python版本2.5,2.6和2.7但对于Python 3失败并出现以下错误:

Expected:
    {u'id': u'123', u'name': u'abc'}
Got:
    {'id': '123', 'name': 'abc'}
Run Code Online (Sandbox Code Playgroud)

问题是,如果我写这样的doctests:

>>> some_function(a=1, b=2)
{'id': '123', 'name': 'abc'}
Run Code Online (Sandbox Code Playgroud)

它们仅适用于Python3,并且在Python2版本上失败.我的问题是如何使其跨版本兼容?

Tho*_*s K 7

我在IPython中遇到了与doctests相同的问题.没有简洁的解决方案,但是我将所有u'前缀包装起来{},即{u}',并制作了一个小功能,包括或排除它们.

你可以看到u_format()函数使用它的doctest.

但那是相当混乱的,所以我把许多测试从医学测试中移开了.

或者,您可以像这样测试它:

>>> some_function(a=1, b=2) == {'id': '123', 'name': 'abc'}
True
Run Code Online (Sandbox Code Playgroud)

如果密钥中需要一些unicode字符串,则可以使用u'abþ',并使用distribute 2to3在doctests 上运行.但这只适用于输入代码,而不适用于输出代码.