能以奇数个反斜杠来结束一个原始字符串吗? | Can a raw string be terminated with an odd number of backslashes?

以奇数个反斜杠结尾的原始字符串将会转义用于标记字符串的引号:

1
2
3
4
5
>>> r'C:\this\will\not\work\'
File "<stdin>", line 1
r'C:\this\will\not\work\'
^
SyntaxError: unterminated string literal (detected at line 1)

有几种绕过此问题的办法。 其中之一是使用常规字符串以及双反斜杠:

1
2
>>> 'C:\\this\\will\\work\\'
'C:\\this\\will\\work\\'

另一种办法是将一个包含被转义反斜杠的常规字符串拼接到原始字符串上:

1
2
>>> r'C:\this\will\work' '\\'
'C:\\this\\will\\work\\'

在 Windows 上还可以使用os.path.join() 来添加反斜杠:

1
2
>>> os.path.join(r'C:\this\will\work', '')
'C:\\this\\will\\work\\'

请注意虽然在确定原始字符串的结束位置时反斜杠会对引号进行“转义“,但在解析原始字符串的值时并不会发生转义。 也就是说,反斜杠会被保留在原始字符串的值中:

1
2
>>> r'backslash\'preserved'
"backslash\\'preserved"

感谢您的支持 | Thank you for supporting

能以奇数个反斜杠来结束一个原始字符串吗? | Can a raw string be terminated with an odd number of backslashes?
http://example.com/2025/05/07/raw_string_with_odd_number_backslashes/
作者
Eli Bi
发布于
2025年5月7日
更新于
2025年5月4日
许可协议