为什么Python没有自动逃脱' \'在__doc__?

时间:2015-11-16 11:22:34

标签: python docstring

似乎某些转义字符在docstring中仍然很重要。例如,如果我们运行python foo.pyPython 2.7.10),则会发出类似ValueError: invalid \x escape的错误。

def f():
    """
    do not deal with '\x0'
    """
    pass

实际上,似乎正确的docsting应该是:

    """
    do not deal with '\\\\x0'
    """

此外,它还会影响import

对于Python 3.4.3+,错误消息为:

  File "foo.py", line 4
    """
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 24-25: truncated \xXX escape

我觉得有点奇怪,因为我认为这只会影响__doc__并且对模块本身没有副作用。

为什么设计如此?它是Python中的缺陷/错误吗?

注意

我知道"""和原始文字的含义,但我认为python解释器应该能够特别处理docstring,至少在理论上是这样。

1 个答案:

答案 0 :(得分:14)

来自PEP 257

  

为了保持一致性,请始终在文档字符串周围使用"""triple double quotes"""。如果在文档字符串中使用任何反斜杠,请使用r"""raw triple double quotes"""。对于Unicode文档字符串,请使用u"""Unicode triple-quoted strings"""

     

有两种形式的文档字符串:单行和多行文档字符串。

同样来自here

  

没有这样的 python 类型作为“原始字符串” - 有原始字符串 文字 ,只有一个 < em> syntax 方法(在众多方法中)指定字符串类型的常量(即文字)。

     

所以“获取”某些东西“作为一个原始字符串”就没有意义了。您可以编写文档字符串作为原始字符串文字(即前缀为r - 这正是表示原始字符串文字的内容,即为python编译器标识此类常量的特定语法) ,或者加倍其中的任何反斜杠(另一种指定包括反斜杠字符的常量字符串的方法),但这与以这种或那种方式“获取”它们无关。