似乎某些转义字符在docstring中仍然很重要。例如,如果我们运行python foo.py
(Python 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,至少在理论上是这样。
答案 0 :(得分:14)
来自PEP 257:
为了保持一致性,请始终在文档字符串周围使用
"""triple double quotes"""
。如果在文档字符串中使用任何反斜杠,请使用r"""raw triple double quotes"""
。对于Unicode文档字符串,请使用u"""Unicode triple-quoted strings"""
。有两种形式的文档字符串:单行和多行文档字符串。
同样来自here:
没有这样的 python 类型作为“原始字符串” - 有原始字符串 文字 ,只有一个 < em> syntax 方法(在众多方法中)指定字符串类型的常量(即文字)。
所以“获取”某些东西“作为一个原始字符串”就没有意义了。您可以编写文档字符串作为原始字符串文字(即前缀为
r
- 这正是表示原始字符串文字的内容,即为python编译器标识此类常量的特定语法) ,或者加倍其中的任何反斜杠(另一种指定包括反斜杠字符的常量字符串的方法),但这与以这种或那种方式“获取”它们无关。