gpt4 book ai didi

重复关键字参数的 Python SyntaxError 与 TypeError

转载 作者:行者123 更新时间:2023-12-03 07:38:19 25 4
gpt4 key购买 nike

Python 显然不允许相同的关键字在函数参数中出现多次。这里有 2 个代码示例来说明这一点:

def foo(a=None, **kwargs):
pass
调用此代码以生成 SyntaxError :
>>> # Example 1
>>> foo(a=1, a=1)
File "<stdin>", line 1
SyntaxError: keyword argument repeated
调用此代码以生成 TypeError :
>>> # Example 2
>>> foo(1, a=123)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: foo() got multiple values for argument 'a'
直觉上,我希望这两个例子都能引发 SyntaxErrors .
为什么第一种方法会产生SyntaxError而第二种方法产生一个 TypeError ?

最佳答案

来自 here :

Syntax errors are the most basic type of error. They arise when the Python parser is unable to understand a line of code.


所以 foo(a=1, a=1)是无效的 python 代码,而 foo(1, a=123)本身 没有 escope 上下文 是有效的 python 代码,因此不会引发语法错误。然而,在代码被解析后,它的解释给出了 当前上下文 失败,因为 foo 的签名之前定义的函数会混淆解释器,因为您对 a 有多个定义.
我可以说这不是 KeyError因为您没有涉及明确的字典。您正在传递关键字参数,但从未创建字典并且 KeyError 是 Raised when a mapping (dictionary) key is not found in the set of existing keys .此外,来自 documentation you linked在评论中,我会说它是 TypeError因为它涉及解析函数调用中的参数。但我不太确定。尽管如此, RuntimeError当其他异常都不适合但解释器检测到错误时,这是​​一个通用异常。

关于重复关键字参数的 Python SyntaxError 与 TypeError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63064844/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com