【发布时间】:2012-04-17 02:44:57
【问题描述】:
r'\' 在 Python 中无法按预期工作。它不是返回一个包含一个字符(反斜杠)的字符串,而是引发一个 SyntaxError。 r"\" 也一样。
如果你有这样的 Windows 路径列表,这会相当麻烦:
paths = [ r'\bla\foo\bar',
r'\bla\foo\bloh',
r'\buff',
r'\',
# ...
]
这个文字不被接受有充分的理由吗?
【问题讨论】:
-
实际上,在这样的文字中,作为最后一个字符的每个 \ 都会引发这个问题。
-
使用
/作为路径分隔符,或者在Windows中使用os.path.sep;也可以酌情使用os.path.split()和os.path.join()。 -
改用
u'\N{REVERSE SOLIDUS}foo\N{REVERSE SOLIDUS}bar'。 -
@Alfe:也许更好的措辞是 Python 设计者认为您的用例不太可能并且不值得支持,并且更喜欢 LL(1) 解析器的简单性。 (有关解析器复杂性的简短评论,请参阅 PEP 3099。)这就是为什么这里的其他人都在回答“不要那样做”——你发现了一个小功能,旨在让某些模糊的边缘情况下的生活更轻松,而您之所以抱怨,是因为它不会让 您的 生活更轻松。软件工程中的一切都是一种权衡。
-
@Daniel:说得好!您能否提供一个参考,说明此“功能”需要更复杂的解析器?对我来说,为什么会这样并不是很明显。
标签: python syntax syntax-error literals