2012-02-15 30 views
1

我用三串以下列方式:Python的三重串报价申报

str="""jeff""" 
str=""""jeff""" 
str=""""jeff"""" # error 
str=""""jeff """" 

第三个是错误,任何人都可以解释为什么这是错误?

回答

6

三个引号终止字符串,因此该

str=""""jeff"""" 

被解析为这样的:

str= """ ("jeff) """ (") 

尾随报价是问题。

BTW,看着BNF definition

longstring  ::= "'''" longstringitem* "'''" 
        | '"""' longstringitem* '"""' 

很明显,明星*是不贪心,我不知道,虽然如果这是什么地方记录。

响应于该评论,这

str = ''''''''jeff''' 

被解释为

(''')(''')('')(jeff)(''') <-- error, two quotes 

str = '''''''''jeff''' 

被解释为

str = (''')(''')(''')(jeff)(''') <-- no error, empty string + jeff 
+0

什么在这种情况下发生的'海峡=“”“”“”“”杰夫“”'',它只有3结尾的引号,仍然错误 – avasal 2012-02-15 08:41:25

+0

@avasal:尝试添加一个;)。查看更新 – georg 2012-02-15 08:47:41

1

只能使用3个引号。

第二字符串被解释为:“杰夫

第三字符串被解释为:”杰夫,后跟一个杂散报价。

0

STR = “” “杰夫” “” - > STR '杰夫'

STR = “” “” 杰夫 “”” - >多STR '杰夫'

STR = “” “” jeff“”“”#error - >这里parser认为你声明“”,“”,jeff,“”,“”

str =“”“”jeff“”“”#error - > same作为前一个

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

为了避免它不喜欢这个 “” “\” A \ “” “”

此外,作为tng345提到的,你可以看看在BNF