那么4个引号的故事是什么?

时间:2013-11-12 18:57:06

标签: python string python-2.7 quotes

我正在使用type()运算符在python shell中进行实验。我注意到:

type('''' string '''') 

返回错误,该错误扫描字符串

尚未:

type(''''' string ''''')

工作正常,并回复找到字符串。

发生了什么事?它是否与type('''' string '''')被解释为type("" "" string "" "")这一事实有关,因此是空字符串和未定义变量的无意义串联?

2 个答案:

答案 0 :(得分:11)

您正在结束一个包含3个引号的字符串,另外还有一个。这有效:

>>> ''''string'''
"'string"

换句话说,Python看到3个引号,然后字符串在 next 3引号结束。之后的任何内容都不再是 字符串的一部分了。

Python还会连接一个接一个放置的字符串:

>>> 'foo' 'bar'
'foobar'

所以'''''string'''''真的意味着'''''string''' + '';第一个字符串在开头3引号后立即开始,直到找到3个结束引号。然后,这三个结束引号之后是另外两个引号,形成一个单独但空的字符串:

>>> '''''string'''
"''string"
>>> '''''string'''''
"''string"
>>> '''''string'''' - extra extra! -'
"''string - extra extra! -"

故事的道德:Python仅支持三重或单引号。任何与此相反的事情都只会导致痛苦。

答案 1 :(得分:0)

鉴于以下情况,您的假设似乎是正确的:

a = '''' string ''''
  File "<stdin>", line 1
    a = '''' string ''''
                       ^
SyntaxError: EOL while scanning string literal

正如Martijn在他的回答中所说,Python正在尝试连接相邻的字符串,并在找不到结尾'时失败。