处理客户的输入我们经常使用strip()
方法。如果我们想从某个特定集合中删除开始结束符号,我们只需将其全部放入参数中即可。
代码:
".yes' ".strip(". '")
显然给出'yes'
字符串作为结果。
当我尝试删除集合时' ".
结果取决于该符号顺序。变体".yes' ".strip(""" ."'""")
当带有符号变体时工作正常"
最后给出SyntaxError: unterminated string literal (detected at line 1)
.
为什么是文字字符串"""""""
(使用七个引号)给出错误?都是一样的'"'!"
.
让我们看一下文档:
三引号:'''三个单引号''',"""三个双引号""" https://docs.python.org/3/library/stdtypes.html#textseq
and
Click here https://docs.python.org/3/reference/lexical_analysis.html#literals核实。所以
-
longstring
i.e. """longstringitem"""
-
longstringitem
可能是单个字符。
那么我们是否必须重写文档或解释器?
我已经在 Python 文档问题上注册了我的问题。可以看到here https://github.com/python/cpython/issues/103594.
这反映了根据 Python 语言规范记录的行为字符串的词法分析 https://docs.python.org/3/reference/lexical_analysis.html#strings:
在三引号文字中,允许(并保留)未转义的换行符和引号,但连续三个未转义的引号终止文字。 (“引号”是用于打开文字的字符,即 ' 或 "。)
这里的关键点是“连续三个未转义的引号终止文字”。所以如果你以文字开头"""
,这个字面值一旦另一个字面值结束"""
遇到序列:解析器不会提前尝试推断文字的不同端点。
当解析器遇到"""""""
(连续七个双引号),因此:
- 第一个、第二个和第三个字符告诉解析器它正在处理由三个双引号分隔的文字。
- 第四个、第五个和第六个字符构成了“三个未转义的引号”,因此它们终止了文字。
- 那么第 7 个字符是
"
没有跟随者"
它可以配对,这样第七个字符就构成了一个未终止的文字。解析器失败SyntaxError: unterminated string literal
.
值得一提的是,反斜杠转义仍然可以用来防止引号字符被视为引号。例如:
s = """\""""
print(s)
prints:
"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)