gpt4 book ai didi

python-3.x - 当一个语句中有两个不同的错误时,Python 如何决定显示哪一个?

转载 作者:行者123 更新时间:2023-12-04 19:26:39 25 4
gpt4 key购买 nike

当我们在解释器中输入以下内容时:

10(b)

我们得到一个未定义 b 的 NameError。但是,当我们尝试:
10(4)

现在,我们得到了 int 不可调用的错误信息。为什么 Python 在上面的第一种情况下没有给出相同的错误,因为即使在那里, int 也是不可调用的?换句话说,在第一个片段中,我们有“int not callable”和“NameError”这两个错误。如果 Python 从左到右扫描,它首先会看到对 int (10) 执行的调用操作。所以它也应该为第一个给出“int not callable”错误。为什么没有?

我认为这可能是因为它首先评估括号内的表达式。但是,当我们尝试这样做时:
f(print("Hello"))

现在,它说 NameError 没有定义 f。它甚至不打印“你好”。所以这表明我们对带括号的表达式求值的假设似乎不成立。

那么它究竟是如何工作的呢?

最佳答案

您只是在执行具有运行时错误的有效表达式。代码在stated evaluation order中执行, 与运营商 executed according to their precedence .在每个表达式中,您需要检查该特定操作的文档以查看操作的各个部分的执行顺序。

在所有三种情况下,您都要求 Python 执行 call ,为此记录了规则:

The primary must evaluate to a callable object[.] All argument expressions are evaluated before the call is attempted.



可调用对象首先被评估为一个对象,然后 10成功执行以产生一个对象。在对参数表达式求值之前,不会尝试调用。

参数表达式是组成要传递给调用的值的表达式,即 (...) 中的位.只有在对这些表达式求值后,才会进行调用。

您的第一个示例给出了 NameError异常(exception),因为 b表达式评估失败。 Python 永远不会执行调用,因为参数表达式的计算失败了。

在你的第二个例子中,参数表达式是 4 , 一个成功的有效表达式,因此只有这样 Python 才能继续执行调用。但是 10不可调用,因此这是下一次失败。

最后一个例子在 f 的开头就失败了。表达式,因为 Python 首先评估了可调用部分,但无法加载可调用部分,因为名称未定义。

对于其他运算符,不同的评估顺序规则适用,您必须查看该特定运算符的文档,以查看组件部分的执行顺序。

关于python-3.x - 当一个语句中有两个不同的错误时,Python 如何决定显示哪一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54163650/

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