当字符串的引号不匹配时,为什么Python不给出任何错误?

问题描述

我最近开始学习Python,但我不明白为什么Python的行为如下:

>>> "OK"
'OK'
>>> """OK"""
'OK'
>>> "not Ok'
  File "<stdin>",line 1
    "not Ok'
           ^
SyntaxError: EOL while scanning string literal
>>> "not OK"""
'not OK'

为什么由于引号数量不匹配,最后一条语句没有给出错误?

解决方法

最后的"""不能被识别为三引号,而是一个"(用于关闭当前字符串文字)和一个空字符串"";将两个并置的字符串文字串联在一起。通过在关闭"和打开{{1}之间放置一个空格,可以更容易地识别相同的行为。

>>> "not OK" ""
'not OK'
,

"not OK"""

Python将此解释为"not OK"+""

如果输入"not Ok""ay",则输出将为'not Okay'

,

您可能会认为“或”之间没有区别,但实际上,Python使用贪婪的方法来接受输入。

一旦Python看到匹配的引号,然后该语句结束。

这就是为什么您可以编写类似"'s" ""的原因。在字符串中有一个',但是由于您在字符串中,因此python不会引发错误。然后,之后是",后跟",但这是一个不同的(空)字符串。

如果您执行类似"s'的操作,那么Python在运行命令之前会先查找下一个"

,

Python使用类似于堆栈的实现来检测引号的打开和关闭。 如果您知道堆栈是什么,它就是一个数据结构,其中的Last元素将首先被删除。

假设您的字符串是A = "''" 它的作用是,对于第一次遇到的每个单引号或双引号,都会将其添加到堆栈中,并且每秒都会将其从堆栈中删除,除非其当然"""被解析为单引号一个

在我们的示例A = "''"中,对其进行迭代,对于前2个元素,它们将被添加到堆栈中,对于接下来的2个元素,它们将被删除。

因此,当且仅当最后堆栈中的元素数必须为零时,引号才会匹配

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...