在python 2.x和3.x上对bytes、str和unicode使用doctest
pretext的Python项目详细描述
借口image::https://travis ci.org/moreati/b-prefix-all-the-doctests.svg
:target:https://travis ci.org/moreati/b-prefix-all-the-doctests
这个包使编写包含字符串的doctests变得容易,而且
这些doctests仍然可以与python 2.6、2.7和3.3+一起使用。
默认情况下,使用python 3.x
`repr()`行为
…代码::python
>;>;import prext;prext.activate()
>;>;b“现在字符串在python 2.x&;3.x上有一个一致的repr”
b“现在字符串在所有python版本上都有一个一致的repr”
>;>;u“unicode字符串和嵌套字符串也可以工作”。split()
[“unicode”、“strings”、“strings”&;,“嵌套”、“字符串”、“工作”、“也”]
代码::python
>;>;textfunc()
u'i return a text(unicode)string'
>;>;bytesfunc()
b'i return a byte(binary)string'
on python 2.x``textfunc()``将通过。在python 3.x上它将失败。
这是因为doctest将预期值与``repr(textfunc())``,
进行比较,而在python 3.x上,`repr()`将不包含``u'``前缀。
python 2.x``bytesfunc()``将失败。在python 3.x上,它将通过。
这是因为在python 2.x上,``repr(bytesfunc())``将不包括``b``
前缀。
代码::python
>;>;textfunc()
“我返回文本(unicode)字符串”
>;>;bytesfunc()
“我返回字节(二进制)字符串”
`` textfunc()``现在在python 2.x上会失败,
``bytesfunc()``在python 3.x上会失败。
hack
--
现在doctests可以
-直接显示函数/方法返回的字符串值,
而不诉诸于``print()``或`.encode()``等
-成功地在所有python版本上测试示例
概念证明:
。代码::python
r“
>;>import sys
>;>import借口
>;>myrepr=bar.prefixrepr()
>;>repr=myrepr.repr
>;>def显示挂钩(值):
…如果值不是none:
…sys.stdout.write(myrepr.repr(value))
>;>;sys.displayhook=\u displayhook
>;>;u'
u'
>;>;b'
b'
>;>;bytes()
b'
>;>;b'\0'
b'\x00'
>;>;B“'”
B“'”
“
备选方案
—————————————————————————————————————————————————————————————————————在所有具有“bytearray()”(2.6版以后)的
python版本上,都有其他选项,例如
-以“bytearray()”返回的“wrap byte string”。
>;>;bytearray(bytesfunc())
bytearray(b'i return a byte(binary)string')
-只支持python 3.x
-使用``print(bytesfunc().decode('ascii')``并仔细选择输入值
-使用``` doctest:+skip`
-使用`` doctest:+ellipsis`
对于doctest`lxml中的html或xml,包括模块
`lxml.html.usedoctest`\lxml.usedoctext`\_ lxml:https://pypi.python.org/pypi/lxml
。_ usedoctest:http://lxml.de/api/lxml.html.usedoctest module.html
。_ lxml.usedoctest:http://lxml.de/api/lxml.usedoctest-module.html
:target:https://travis ci.org/moreati/b-prefix-all-the-doctests
这个包使编写包含字符串的doctests变得容易,而且
这些doctests仍然可以与python 2.6、2.7和3.3+一起使用。
默认情况下,使用python 3.x
`repr()`行为
…代码::python
>;>;import prext;prext.activate()
>;>;b“现在字符串在python 2.x&;3.x上有一个一致的repr”
b“现在字符串在所有python版本上都有一个一致的repr”
>;>;u“unicode字符串和嵌套字符串也可以工作”。split()
[“unicode”、“strings”、“strings”&;,“嵌套”、“字符串”、“工作”、“也”]
代码::python
>;>;textfunc()
u'i return a text(unicode)string'
>;>;bytesfunc()
b'i return a byte(binary)string'
on python 2.x``textfunc()``将通过。在python 3.x上它将失败。
这是因为doctest将预期值与``repr(textfunc())``,
进行比较,而在python 3.x上,`repr()`将不包含``u'``前缀。
python 2.x``bytesfunc()``将失败。在python 3.x上,它将通过。
这是因为在python 2.x上,``repr(bytesfunc())``将不包括``b``
前缀。
代码::python
>;>;textfunc()
“我返回文本(unicode)字符串”
>;>;bytesfunc()
“我返回字节(二进制)字符串”
`` textfunc()``现在在python 2.x上会失败,
``bytesfunc()``在python 3.x上会失败。
hack
--
现在doctests可以
-直接显示函数/方法返回的字符串值,
而不诉诸于``print()``或`.encode()``等
-成功地在所有python版本上测试示例
概念证明:
。代码::python
r“
>;>import sys
>;>import借口
>;>myrepr=bar.prefixrepr()
>;>repr=myrepr.repr
>;>def显示挂钩(值):
…如果值不是none:
…sys.stdout.write(myrepr.repr(value))
>;>;sys.displayhook=\u displayhook
>;>;u'
u'
>;>;b'
b'
>;>;bytes()
b'
>;>;b'\0'
b'\x00'
>;>;B“'”
B“'”
“
备选方案
—————————————————————————————————————————————————————————————————————在所有具有“bytearray()”(2.6版以后)的
python版本上,都有其他选项,例如
-以“bytearray()”返回的“wrap byte string”。
>;>;bytearray(bytesfunc())
bytearray(b'i return a byte(binary)string')
-只支持python 3.x
-使用``print(bytesfunc().decode('ascii')``并仔细选择输入值
-使用``` doctest:+skip`
-使用`` doctest:+ellipsis`
对于doctest`lxml中的html或xml,包括模块
`lxml.html.usedoctest`\lxml.usedoctext`\_ lxml:https://pypi.python.org/pypi/lxml
。_ usedoctest:http://lxml.de/api/lxml.html.usedoctest module.html
。_ lxml.usedoctest:http://lxml.de/api/lxml.usedoctest-module.html