为什么与以前的Python版本相比,Python 3.9中的SyntaxErrors的错误消息有所不同?
编写列表时缺少逗号是一个非常常见的错误源(至少对我来说)。在Python3.8及更低版本中,在作为关键字参数传递给函数的列表中缺少逗号会产生一个明显的错误,该错误会清楚地指出错误的位置为什么与以前的Python版本相比,Python 3.9中的SyntaxErrors的错误消息有所不同?,python,syntax-error,python-3.9,peg,Python,Syntax Error,Python 3.9,Peg,编写列表时缺少逗号是一个非常常见的错误源(至少对我来说)。在Python3.8及更低版本中,在作为关键字参数传递给函数的列表中缺少逗号会产生一个明显的错误,该错误会清楚地指出错误的位置 Python 3.8.5(默认,2020年9月4日,07:30:14) [GCC 7.3.0]::linux上的Anaconda公司 >>>def myfunc(**kwargs): ... 通过 ... >>>myfunc(mylist=[10,10,45]) 文件“”,第1行 myfunc(myli
Python 3.8.5(默认,2020年9月4日,07:30:14)
[GCC 7.3.0]::linux上的Anaconda公司
>>>def myfunc(**kwargs):
... 通过
...
>>>myfunc(mylist=[10,10,45])
文件“”,第1行
myfunc(mylist=[10,10,45])
^
SyntaxError:无效语法
在Python3.9中,相同的代码给出了不同的错误消息(具有相同的错误类型),这更难理解,并且在调试时将我带入了一个完全不同的方向
Python 3.9.2(默认,2021年3月3日,20:02:32)
[GCC 7.3.0]::Linux上的Anaconda公司
>>>def myfunc(**kwargs):
... 通过
...
>>>myfunc(mylist=[10,10,45])
文件“”,第1行
myfunc(mylist=[10,10,45])
^
SyntaxError:表达式不能包含赋值,可能您的意思是“==”?
不过,将列表分配给变量似乎处理得“正确”
mylist=[10,10,45]
文件“”,第1行
mylist=[10,10,45]
^
SyntaxError:无效语法
这肯定与新的PEG解析器有关,因为用python-xoldparser
启动python会返回以前的行为
我想知道在这些解析器中如何以不同的方式处理此错误?为什么PEG解析器给出的错误消息在这里看起来如此离谱?PEG解析器认为这里发生了什么?是否有一类错误将在PEG解析器中以不同的方式处理?这看起来像是Python3.9中的一个bug,它在Python3.10中得到了修复。代码在Python3.10中生成正确的错误消息,而不考虑解析器。哦!好啊你知道我可以在哪里查找bug报告/修复(在Python问题跟踪器或Github上?)