此问题已在此处有答案:
Why in Python 3 do quadruple quotes produce a Syntax error?(4个答案)
8小时前关闭
处理客户端输入我们经常使用strip()
方法。如果我们想从一些特定的集合中删除开始-结束符号,我们只需将其全部放入参数中。
守则
".yes' ".strip(". '")
显然给出了'yes'
字符串作为结果。
当我试图删除集合' ".
结果取决于这个符号顺序。变体".yes' ".strip(""" ."'""")
工作正常,当变体与符号"
在最后给出SyntaxError: unterminated string literal (detected at line 1)
。
所以问题是:“为什么文字字符串"""""""
(使用七个引号)给出错误?它只是相同的'"'!"
更新1。他们说我有错误的文字心理模型。所以让我们看看文档:
三重引用:'''三个单引号''',“"“三个双引号”””
和x1c 0d1x。点击这里验证。所以
longstring
即"""longstringitem"""
longstringitem
可以是单个字符。
所以我们必须重写文档或解释器吗?
**更新2.**我建议重写解释器的逻辑。因为我的例子从"""
开始,以"""
结束,并且里面有一个符号。它不同于'''
bc对''
必须使用相同的符号'
之间。我没有在"""
"""
对里面使用"""
。看到区别了吗
**更新3.**我已经注册了我的问题关于Python文档问题.可以看到here.
**更新4.**我已经标记了答案的答案,因为我保证这样做)).但文本从文档真的说:
这是错误的:'''
这是错误的:"""
这是错误的:"""""""""
我同意。但文件中没有地方说:"""""""
是错的。这就是我想说的。
没有正式的规则。
**已更新5.**查看
In[5] :""""TEXT" """
Out[5]: '"TEXT" '
In[6] :""""TEXT""""
File "C:\Users\vasil\AppData\Local\Temp\ipykernel_5516\2295884511.py", line 1
""""TEXT""""
^
SyntaxError: EOL while scanning string literal
即“”行中的4在开始时被允许,在结束时被禁止。这是正确的情况吗?
2条答案
按热度按时间bkhjykvo1#
这反映了根据Python语言规范围绕字符串词法分析的记录行为:
在三重引用的文字中,允许(并且保留)未转义的换行符和引号,除非一行中的三个未转义的引号终止文字。(“引号”是用于打开文字的字符,即'或“。)
这里的关键点是“一行中的三个未转义的引号终止文字”。因此,如果您以
"""
开始文字,则只要遇到另一个"""
序列,该文字就会结束:解析器不会提前尝试推断文字的不同端点。当解析器遇到
"""""""
(一串七个双引号)时,因此:1.第一、第二和第三个字符告诉解析器它正在处理一个由三个双引号分隔的文本。
1.第4、第5和第6个字符构成了“三个不可转义的引号”,因此它们终止了文字。
1.第7个字符是
"
,后面没有可以配对的"
,所以第7个字符构成了一个未终止的文字。解析器失败,返回SyntaxError: unterminated string literal
。值得一提的是,反斜杠转义仍然可以用来防止引号字符被视为引号。例如:
打印:
k4ymrczo2#
这个行为是由python解析器中一个有趣的东西决定的。你可以读它here。
第114章你看:
这部分代码定义了三重引用文字的正则表达式。我们可以看到,单独的
"
是允许的,但如果它后面没有另一个"
。所以逻辑上它允许,但这个正则表达式禁止它。这是我问题的正确答案。但谁在乎呢……