多行字符串文字解析

时间:2013-10-12 07:09:12

标签: python string python-3.x

我在Python的交互式控制台中尝试了以下内容:

>>> """"string"""
'"string'
>>> """"string""""
SyntaxError: EOL while scanning string literal

我希望后一种情况""""string""""返回'"string"'因为我在开头有三个引号,在结尾有三个引号。 Python如何解释它?

2 个答案:

答案 0 :(得分:1)

Python将其解释为:

 """"string""" "                                                                                                                   "
#^^^These three " to start the string literal. The next one counts in the string.
#The three last ones after the last one are counted as the end.

请注意偏离"

你可以这样做:

'''"string"'''

答案 1 :(得分:1)

它会看到三重引号的字符串""""string""",后跟一个非三重引号的字符串,该字符串无法通过EOL "完成。

tokenize模块可以显示它正在做什么:

s = '""""string""""'
g = tokenize.generate_tokens(io.StringIO(s).readline)
t = list(g)
print(t)

这会打印带有'""""string"""'的STRING令牌,然后带有'"'的ERRORTOKEN令牌。

一般来说,当你无法弄清楚如何解释the grammar(我假设你先看过语法?)时,回答任何问题的最佳方法是使用tokenize,ast和friends