我按以下方式使用三重字符串:
str="""jeff"""
str=""""jeff"""
str=""""jeff"""" # error
str=""""jeff """"
第三个是错误,有人可以解释为什么这是错误吗?
答案 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