2012-02-15 81 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