gpt4 book ai didi

Python 异常 : EAFP and What is Really Exceptional?

转载 作者:太空狗 更新时间:2023-10-29 16:59:12 25 4
gpt4 key购买 nike

在几个地方(herehere)有人说 Python 强调“请求宽恕比请求许可更容易”(EAFP)应该用异常只应该真正调用的想法来缓和异常(exception)情况。考虑以下情况,我们在优先级队列中弹出并推送直到只剩下一个元素:

import heapq
...
pq = a_list[:]
heapq.heapify(pq)
while True:
min1 = heapq.heappop(pq)
try:
min2 = heapq.heappop(pq)
except IndexError:
break
else
heapq.heappush(pq, min1 + min2)
# do something with min1

异常仅在循环的 len(a_list) 迭代中引发一次,但它并不是真正的异常,因为我们知道它最终会发生。这种设置使我们免于多次检查 a_list 是否为空,但(也许)它的可读性不如使用显式条件。

对这种非异常程序逻辑使用异常的共识是什么?

最佳答案

exceptions should only be called in truly exceptional cases

不是在 Python 中:例如,每个 for 循环(除非它过早地breakreturn ) 因抛出并捕获异常 (StopIteration) 而终止。因此,每个循环发生一次的异常对 Python 来说并不陌生——它经常出现!

所讨论的原则在其他语言中可能很重要,但绝对没有理由将该原则应用于 Python,因为它与语言的精神背道而驰。

在这种情况下,我喜欢 Jon 的重写(应该通过删除 else 分支来进一步简化),因为它使代码更紧凑——一个实用的原因,绝对不是 Python 风格与异类原则的“调和”。

关于Python 异常 : EAFP and What is Really Exceptional?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3086806/

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