为什么Python中的单个反斜杠原始字符串会导致语法错误?

时间:2015-05-17 03:31:48

标签: python string syntax-error

另请参阅Why can't I end a raw string with a backslash?Why can't Python's raw string literals end with a single backslash?问题及相关答案。

在我的Python 2程序中,我使用了大量带有嵌入式反斜杠的文字字符串。我可以使用另一个反斜杠来转义每个反斜杠(例如:"red\\blue")或使用Python原始字符串(例如:r"red\blue")。我已经对原始字符串方法进行了标准化,除了一个方法之外,它在所有情

如果我想表示双反斜杠,我可以使用r"\\",但是如果我尝试输入单个反斜杠文字r"\" Python抱怨语法错误。显而易见的解决方法是在这种情况下使用"\\",但是为什么单个原始字符串反斜杠是错误的? 这是Python中的错误吗? 有没有办法将单个反斜杠编码为原始字符串?

示例:

>>> r"red\blue"
'red\\blue'
>>> r"\\"
'\\\\'
>>> r"\"
  File "<stdin>", line 1
    r"\"
       ^
SyntaxError: EOL while scanning string literal
>>> 

我宁愿在整个程序中使用原始字符串保持一致,并且在几个地方使用此"\\"看起来像一个kludge。使用r"\\"[0]并不是更好。我还考虑在程序开始时使用常量BACKSLASH BACKSLASH = r"\\"[0]。另一个问题。

更新 当原始字符串末尾有一个奇数个反斜杠时,也会发生此错误。使用的默认字符串扫描程序将反斜杠解释为转义字符,以便最后一个反斜杠将转义结束引号字符。意图是"'可以嵌入到字符串中,但是生成的字符串仍然会将反斜杠作为普通字符。

有几个与此问题相关的问题,但没有一个答案解释为什么单个反斜杠原始字符串是错误或如何将单个反斜杠编码为原始字符串:

python replace single backslash with double backslash

can't print '\' (single backslash) in Python

Python regex to replace double backslash with single backslash

Convering double backslash to single backslash in Python 3

Why can't I end a raw string with a backslash?

Why can't Python's raw string literals end with a single backslash?

1 个答案:

答案 0 :(得分:1)

这里的问题很简单,系统假设单个反斜杠用于转义,你正在转义你的引用,否则你必须转义转义字符。在任何允许角色禁用其他角色功能的环境中都会发生这种情况。