【问题标题】:Python doctests and unicodePython doctests 和 unicode
【发布时间】:2013-06-30 14:47:04
【问题描述】:

我有一个在 Python 2.7 和 3.2+ 中运行不变的代码库。但是文档 rst 文件中的 doctests 让我很头疼。当我在 Python2 中运行它们时,我得到UnicodeEncodeError: 'ascii' codec can't encode character u'\xb2' in position 16: ordinal not in range(128)。如果我添加

.. testsetup:: *

   from __future__ import unicode_literals

然后我收到很多错误,例如

Expected:
    'something'
Got:
    u'something'

有没有办法在 Python 2.7 和 3.2+ 中保持不变的第一个文件中包含 unicode 字符的 doctest?

【问题讨论】:

  • 在运行它们时实际指定要使用的编码是否需要做很多工作?
  • @PauloBu:你是怎么做到的?
  • 好吧,我没有看到代码,所以这会很困难,但是,您是否在代码中的某处使用了函数doctest.testfile?如果是这样,请添加到问题中。
  • 我没有。当我使用 sphinx (make doctest) 构建文档时,会调用 Doctests。我在 pypi 注册中遇到了类似的错误。我希望找到基于更改 rst 文件而不是调用的解决方案。在
  • 请添加给您带来问题的代码。回溯也将提供丰富的信息。

标签: python unicode python-3.x python-2.x doctest


【解决方案1】:

确保您使用的是 Python 3.3。它添加了显式的u'unicode literals'——即再次使用u前缀——以简化带有Unicode文字的Python 2和Python 3之间的转换。参见http://docs.python.org/3/whatsnew/3.3.html#pep-414-explicit-unicode-literals

【讨论】:

  • 对我来说,添加 u'some string' 前缀会使 doctest 即使使用 Python 3.5 也会失败
  • @matth 忽略的字符串字面量 u 前缀对于 Python 3.5 和 Python 3.6 仍然有效(请参阅 docs.python.org/3.5/reference/…)。你能创建一个简单的例子来说明问题吗?
  • 我在这里问了一个新问题,它包括一个例子:stackoverflow.com/questions/42158733/…
  • 正如 Martijn Pieters 在后面的问题下面指出的那样,没有简单的解决方案来弯曲 doctest。原因是 u'string literal' 被重新引入 Python 3.3 只是为了轻松重用旧源。这是一种妥协。 u 前缀被忽略。这样,无论您是否使用前缀,字符串值都将相同。另一方面,字符串表示将始终没有u 前缀。 doctest 太简单了,无法在没有任何额外工作的情况下解决这种妥协。它基于结果的字符串表示形式的比较。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-10
  • 1970-01-01
  • 1970-01-01
  • 2013-11-14
  • 1970-01-01
  • 1970-01-01
  • 2014-06-14
相关资源
最近更新 更多