Python doctests和unicode
我有一个在Python 2.7和3.2+中运行不变的代码库。但是文档rst文件中的博士让我头疼。当我在Python2中运行它们时,我得到Python doctests和unicode,python,unicode,python-3.x,python-2.x,doctest,Python,Unicode,Python 3.x,Python 2.x,Doctest,我有一个在Python 2.7和3.2+中运行不变的代码库。但是文档rst文件中的博士让我头疼。当我在Python2中运行它们时,我得到UnicodeEncodeError:“ascii”编解码器无法对16位的字符u'\xb2'进行编码:序号不在范围(128)。如果我加上 .. testsetup:: * from __future__ import unicode_literals 然后我得到了很多错误,比如 Expected: 'something' Got: u'
UnicodeEncodeError:“ascii”编解码器无法对16位的字符u'\xb2'进行编码:序号不在范围(128)
。如果我加上
.. testsetup:: *
from __future__ import unicode_literals
然后我得到了很多错误,比如
Expected:
'something'
Got:
u'something'
有没有一种方法可以让rst文件中包含unicode字符的doctest在Python 2.7和3.2+中保持不变?确保您使用的是Python 3.3。它添加了显式的
u'unicode literals'
——即再次使用u
前缀——以简化Python 2与unicode literals和Python 3之间的转换。请看在运行它们时,指定要使用的编码需要做很多工作吗?@PauloBu:您是如何做到的?我没有看到代码,所以这很难,但是,您是否在代码中的某个地方使用了函数doctest.testfile
?如果是,请补充问题。我不知道。使用sphinx构建文档时会调用doctest(makedoctest
)。我在pypi注册中遇到了类似的错误。我希望找到一个基于更改rst文件而不是调用的解决方案。请添加给您带来问题的代码。对我来说,添加u'some string'
前缀会使doctest失败,即使使用Python 3也是如此。5@matth字符串文本的被忽略的u
前缀对于Python3.5和Python3.6仍然有效(请参阅)。你能创建一个简单的例子来说明这个问题吗?我在这里问了一个新问题,其中包括一个例子:正如Martijn Pieters在后面的问题中指出的,没有简单的解决方案来弯曲doctest
。原因是u'string literal'
被重新引入到Python3.3中,只是为了方便地重用旧的源代码。这是一种妥协。u
前缀被忽略。这样,无论是否使用前缀,字符串值都将相同。另一方面,字符串表示将始终没有u
前缀。doctest
太简单了,不需要任何额外的工作就无法解决这个问题。它基于比较结果的字符串表示形式。