5

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

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

返回一个错误,扫描字符串时遇到问题

然而:

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

工作正常并响应找到了一个字符串。

到底是怎么回事?它是否与type('''' string '''')被解释为type("" "" string "" "")空字符串和未定义变量的无意义串联的事实有关?

4

2 回答 2

10

您正在用 3 个引号加上一个额外的引号来结束一个字符串。这有效:

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

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

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

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

so'''''string'''''的意思是'''''string''' + ''真的;第一个字符串在开始的 3 个引号之后开始,直到找到 3 个结束引号。这三个右引号之后是另外两个引号,形成一个单独但空的字符串:

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

故事的寓意:Python 仅支持三引号或单引号。任何偏离这一点的事情都只会导致痛苦。

于 2013-11-12T18:59:10.620 回答
0

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

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

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

于 2013-11-12T19:01:09.460 回答