我正在研究一些必须操作unicode字符串的代码。我正试图为它写博士论文,但遇到了麻烦。下面是一个最小的示例,说明了该问题:
# -*- coding: utf-8 -*-
def mylen(word):
"""
>>> mylen(u"áéíóú")
5
"""
return len(word)
print mylen(u"áéíóú")
首先,我们运行代码以查看print mylen(u"áéíóú")
的预期输出。在
接下来,我们对它运行doctest来查看问题。在
$ python -m
5
**********************************************************************
File "mylen.py", line 4, in mylen.mylen
Failed example:
mylen(u"áéíóú")
Expected:
5
Got:
10
**********************************************************************
1 items had failures:
1 of 1 in mylen.mylen
***Test Failed*** 1 failures.
那么我如何测试mylen(u"áéíóú")
的计算结果是5?在
如果你想要unicode字符串,你必须使用unicode docstrings!当心
u
!在只要测试通过,这个方法就行了。对于Python 2.x,您还需要另一种方法来使详细的doctest模式工作,或者在测试失败时获得正确的回溯:
^{pr2}$注意!仅用于调试目的的setdefaultencoding。我可以接受它作为doctest使用,但不能在您的产品代码中的任何地方使用。在
Python 2.6.6对unicode输出的理解不太好,但可以使用以下方法解决:
sys.setdefaultencoding("UTF-8")
描述了黑客攻击print
语句。在在我的例子中,这个docstring说明测试失败了:
带有“错误”信息
^{pr2}$使用
print
我们可以修复:这在Python中似乎是一个已知且尚未解决的问题。请参阅未结问题here和here。在
毫不奇怪,它可以修改为在Python 3中正常工作,因为那里的所有字符串都是Unicode:
相关问题 更多 >
编程相关推荐