如何打印单个反斜杠?

117
当我写print('\')print("\")print("'\'")时,Python不会打印反斜杠\符号。相反,它将对前两个产生错误,并对第三个打印''。我该怎么做才能打印反斜杠?
这个问题涉及生成一个带有单个反斜杠的字符串。这特别棘手,因为它不能使用原始字符串来完成。关于为什么这样的字符串用两个反斜杠表示的相关问题,请参见为什么反斜杠会出现两次?。要在其他字符串中包含字面上的反斜杠,请参见在Python中使用反斜杠(不是为了转义)

请参考以下链接:python: SyntaxError: EOL while scanning string literal,了解相关的错误信息和其他常见原因。 - Karl Knechtel
4个回答

127
你需要通过在反斜杠前加上另一个反斜杠来转义它。
print("\\")

字符\被称为转义字符,它会以不同的方式解释其后的字符。例如,单独使用n只是一个字母,但当你在它前面加上反斜杠时,它变成了\n,表示换行符。

正如你可能猜到的那样,\也需要进行转义,以免它像一个转义字符一样起作用。实际上,你必须对转义字符进行转义。

请参阅字符串文字的文档


15
用不需要转义的方式打印反斜杠的hacky方法是将其字符代码传递给 chr :
>>> print(chr(92))
\

2
嘿,伙计!不错的+1,这很叛逆! 然而,在交互式解释器中,s = chr(92)'\\',但是当 print(s) 时会输出 \\ - Darshan P.
3
这是预期且众所周知的,因为解释器打印出来的内容可以复制/粘贴到程序中(表示),而不是将其打印为字符串。请参见__str____repr__的区别。 - Jean-François Fabre
感谢分享__str____repr__,因为我是Python的新手。 - Darshan P.
1
@DarshanP。请参阅 https://dev59.com/zWAf5IYBdhLWcg3w_Gyr 了解详细信息。 - Karl Knechtel

1

为了完整起见:反斜杠也可以通过十六进制序列进行转义:"\x5c";或短的Unicode序列:"\u005c";或长的Unicode序列:"\U0000005c"。所有这些都将产生一个带有单个反斜杠的字符串,Python会愉快地以其规范表示法'\\'将其报告给您。


1
print(fr"\{''}")

或者这样怎么样?
print(r"\ "[0])

5
如果你有意让你的代码更难读懂,你也可以这样做:import base64; print(base64.b64decode(b'XA==').decode('ascii')) - user3064538
好的,你能告诉我如何使用单个反斜杠进行连接吗? - Tae Soo Kim
你是指 "\\".join([]) 这段代码吗? - user3064538
实际上,由于Python中的路径经常需要使用原始字符串,因此很容易混淆使用fr"\"和"\"。这就是为什么曾经有人使用它的原因。 - Tae Soo Kim
1
你是这样编写所有Windows路径的,像 fr"C:\{''}\{''}Program Files\{''}system32\{''}programs",因为你担心会忘记 r?更好的解决方案可能是使用pathlib,然后你可以在Windows路径中使用 /斜杠PureWindowsPath('c:/foo/bar/setup.py')。你编写r"\ "[0]的原因是什么? - user3064538
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接