我正在使用type()运算符在python shell中进行实验。我注意到:
type('''' string '''')
返回错误,该错误扫描字符串
尚未:
type(''''' string ''''')
工作正常,并回复找到字符串。
发生了什么事?它是否与type('''' string '''')
被解释为type("" "" string "" "")
这一事实有关,因此是空字符串和未定义变量的无意义串联?
答案 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正在尝试连接相邻的字符串,并在找不到结尾'
时失败。