这是不是 Python 的一个 bug?

>>> print(r’why’)


SyntaxError: EOL while scanning string literal

>>>

正常不是应该输出 why\吗?
这是不是 Python 的一个 bug?

26 回复

\ 是转义符号
如果你想输出 ‘why’ 要用

<br>print('why\\')<br>


我无法理解你的问题。

前面已经加 r 去掉了\的转义功能。
事实上,print(‘why\’)的结果是 why\而不是 why\

(少写了 r )
事实上,print(r’why\’)的结果是 why\而不是 why\

一个单独的\ 不能放在最后

Specifically, a raw string cannot end in a single backslash (since the backslash would escape the following quote character).

你的右括号错了,)

错了,是我看错了。

这个 Stack Overflow 下有个傻 x 老外…ID 感人…也不知道受了什么迫害,能在网上 bb 些没用的

记得之前他岳母是轮子学员 他在 V 站也有账号的 跟本帖跑题了就不多说了

规范上面已经有人贴了 '是和\t 一样是特殊的字符------单引号。 解释器 会跳过它 继续找单引号 来确定这个 string 在什么时候结束,所以报错。

有些东西当没看见就好

不过你不提我确实没注意到这个问题, 可惜 V2EX 不能删


C#中类似 r 前缀的 前缀的语义简单多了:将字符中的\变成普通字符。
Console.WriteLine(“why”); # 输出:why<br>碰到",用""表示:
C

接上
Console.WriteLine(@“dir ““c:\my docs”””);

Python 的 r 字符串里如果有引号,还要根据里面的引号选择不同的外围引号,真麻烦

这样的话一条 print 语句输出一个\结束的字符就是不可能做到到事情了?
print (r “ c:\windows\”) ???

我的理解是 python 的词法分析器不能理解 r 标记,而且每当遇到反斜杠时就会把反斜杠和他后面的一个字符组成一组。
因此楼主的字符串在词法分析这一层就报错了。

其实我觉得这是个 bug 啦(从语义上来说),但是又没那么好改,只好当成特性处理了。

不是这样,而是在 r’'里面仍然需要用反斜杠来对引号进行转义,而这也是没办法,因为既然是用引号做字符串的起点和终点,就必须在里面对引号进行转义。只能说是这个选择不太好,其实如果用反引号( backtick )来表示 raw string 可能是个更好的选择。

print(r"test" + “\”)

根本原因是 " 和 ’ ,这两个与 \t 和 \n 一样,是转义字符。
实际上,这的确是语言的一个 Bug,只不过被洗白成了特性。

不算,正确的应该是 r’why\’.
\把’转义了。

也许设计的时候没考虑到,于是把这个写到文档里面变成了一个例外。。
类似于,Perl 6 的 Q 无视任何转义字符

say Q{There is a backslash in the end }; #

接上文 ~~ 漏了个 C#

回到顶部