Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python doctests和unicode_Python_Unicode_Python 3.x_Python 2.x_Doctest - Fatal编程技术网

Python doctests和unicode

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'

我有一个在Python 2.7和3.2+中运行不变的代码库。但是文档rst文件中的博士让我头疼。当我在Python2中运行它们时,我得到
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
太简单了,不需要任何额外的工作就无法解决这个问题。它基于比较结果的字符串表示形式。