当字符串周围的引号不匹配时,为什么 Python 不给出任何错误?
Why doesn't Python give any error when quotes around a string do not match?
我最近开始学习Python,我不明白为什么Python会这样:
>>> "OK"
'OK'
>>> """OK"""
'OK'
>>> "not Ok'
File "<stdin>", line 1
"not Ok'
^
SyntaxError: EOL while scanning string literal
>>> "not OK"""
'not OK'
为什么最后一条语句不报错,因为引号数不匹配?
最后的 """
不被识别为 triple-quotation,而是单个 "
(关闭当前字符串文字)后跟一个空字符串 ""
;两个并列的字符串文字被连接起来。通过在关闭和打开 "
.
之间放置 space 可以更容易地识别相同的行为
>>> "not OK" ""
'not OK'
"not OK"""
Python 将其解释为 "not OK"+""
如果你给出 "not Ok""ay"
,你将得到 'not Okay'
的输出
你会认为"或'没有区别,但实际上,Python使用贪婪的方法来接受输入。
一旦 Python 看到匹配的引文,语句就结束了。
这就是为什么你可以写出类似 "'s" ""
的原因。在字符串中有一个 '
但因为你在一个字符串中, python 不会引发错误。然后在那之后,有一个 "
后跟 "
但那是一个不同的(空)字符串。
如果您执行类似 "s'
的操作,那么 Python 会在运行您的命令之前寻找下一个 "
。
Python 使用类似于堆栈的实现来检测报价的开盘和收盘。
如果你知道堆栈是什么,它是一种数据结构,其中最后一个元素将首先被删除。
假设您的字符串是 A = "''"
它所做的是,对于第一次遇到的每个单引号或双引号,它将把它添加到堆栈中,并且每隔一秒,它将从堆栈中删除,当然,除非 """
将被解析为单引号一个
在我们的示例中,A = "''"
,对其进行迭代,对于前 2 个元素,它们将被添加到堆栈中,对于接下来的 2 个,它们将被删除。
所以引号匹配,当且仅当最后栈中的元素个数必须为零
我最近开始学习Python,我不明白为什么Python会这样:
>>> "OK" 'OK' >>> """OK""" 'OK' >>> "not Ok' File "<stdin>", line 1 "not Ok' ^ SyntaxError: EOL while scanning string literal >>> "not OK""" 'not OK'
为什么最后一条语句不报错,因为引号数不匹配?
最后的 """
不被识别为 triple-quotation,而是单个 "
(关闭当前字符串文字)后跟一个空字符串 ""
;两个并列的字符串文字被连接起来。通过在关闭和打开 "
.
>>> "not OK" ""
'not OK'
"not OK"""
Python 将其解释为 "not OK"+""
如果你给出 "not Ok""ay"
,你将得到 'not Okay'
你会认为"或'没有区别,但实际上,Python使用贪婪的方法来接受输入。
一旦 Python 看到匹配的引文,语句就结束了。
这就是为什么你可以写出类似 "'s" ""
的原因。在字符串中有一个 '
但因为你在一个字符串中, python 不会引发错误。然后在那之后,有一个 "
后跟 "
但那是一个不同的(空)字符串。
如果您执行类似 "s'
的操作,那么 Python 会在运行您的命令之前寻找下一个 "
。
Python 使用类似于堆栈的实现来检测报价的开盘和收盘。 如果你知道堆栈是什么,它是一种数据结构,其中最后一个元素将首先被删除。
假设您的字符串是 A = "''"
它所做的是,对于第一次遇到的每个单引号或双引号,它将把它添加到堆栈中,并且每隔一秒,它将从堆栈中删除,当然,除非 """
将被解析为单引号一个
在我们的示例中,A = "''"
,对其进行迭代,对于前 2 个元素,它们将被添加到堆栈中,对于接下来的 2 个,它们将被删除。
所以引号匹配,当且仅当最后栈中的元素个数必须为零