Python三重字符串引用声明

时间:2012-02-15 08:30:40

标签: python string

我按以下方式使用三重字符串:

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

第三个是错误,有人可以解释为什么这是错误吗?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

仅使用3个引号。

第二个字符串被解释为:“jeff

第三个字符串被解释为:“jeff,后面是一个流浪的引用。

答案 2 :(得分:0)

str =“”“jeff”“” - &gt; str'jeff'

str =“”“”jeff“”“ - &gt; multiline str'jeff'

str =“”“”jeff“”“”#error - &gt;这里解析器认为你声明“”,“”,杰夫,“”,“”

str =“”“”jeff“”“”#error - &gt;与前一个相同

>>> """"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