为什么Python不会在__doc__中自动转义'\'?

Hon*_*hen 10 python docstring

似乎某些转义字符在docstring中仍然很重要.例如,如果我们运行python foo.py(Python 2.7.10),它将发出错误,如ValueError: invalid \x escape.

def f():
    """
    do not deal with '\x0'
    """
    pass
Run Code Online (Sandbox Code Playgroud)

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

    """
    do not deal with '\\\\x0'
    """
Run Code Online (Sandbox Code Playgroud)

另外它也会影响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
Run Code Online (Sandbox Code Playgroud)

我觉得有点奇怪,因为我认为它只会对__doc__模块本身产生影响并且没有任何副作用.

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

注意

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

Kev*_*uan 16

PEP 257:

为了保持一致性,请始终使用"""triple double quotes"""docstrings.使用r"""raw triple double quotes""",如果你在你的文档字符串使用任何反斜线.对于Unicode文档字符串,请使用u"""Unicode triple-quoted strings""".

docstrings有两种形式:one-liners和multi-line docstrings.


也来自这里:

没有像"原始字符串" 这样的python类型 - 有原始字符串文字,它只是一种语法方法(在众多中),用于指定字符串类型的常量(即文字).

因此,"获取"某些"作为原始字符串"是没有意义的.您可以 docstrings 为原始字符串文字(即,使用前缀r- 这正是表示原始字符串文字的内容,即为python编译器标识此类常量的特定语法),或者加倍其中的任何反斜杠(替代方案)指定常量字符串的方法,包括反斜杠字符),但这与以这种或那种方式"获取"它们无关.

  • @hongxuChen你是说字符串文字应该根据其上下文进行不同的解析。那会很混乱。 (2认同)