在几个地方曾说过,Python强调“要求宽恕比允许容易”(EAFP),应该通过这样的想法来加以限制:只有在真正特殊的情况下才应调用异常。考虑以下情况,在其中我们弹出并推送优先级队列,直到只剩下一个元素:
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
不必检查是否为空,但是,(也许)它比使用显式条件可读性差。
对于这种非异常程序逻辑,使用异常的共识是什么?
仅在真正例外的情况下才应调用异常
并非在Python中:例如, 每个 for
循环(除非过早地break
s或return
s
StopIteration
)都被抛出并捕获的异常()终止。因此,每个循环一次发生的异常对于Python来说并不奇怪-那里的情况经常发生!
有问题的原则在其他语言中可能至关重要,但这绝对没有理由将该原则应用于Python,因为它与语言的精神背道而驰。
在这种情况下,我喜欢Jon的重写(应该通过删除else分支来进一步简化),因为它使代码更紧凑-
这是一个务实的原因,最肯定不是使用异类原理对Python样式进行“调和”。
问题内容: Python中的“使用EAFP原理”是什么意思?你能提供一些例子吗? 问题答案: 一个示例是尝试访问字典键。 EAFP: LBYL:
我收到警告: 我在看医生。 我看到很多关于如何禁用它的帖子,如果我知道我在做什么,就像这一个。 一个有用的总结(或者只是一个正确方向的观点)将非常感谢,这样我就可以决定是否禁用它。我的直觉是我不应该禁用它,所以我想知道如何正确地解决这个问题。
我运行了几个测试场景,其中我从SOAP客户端调用远程系统的SOA服务,并遇到了各种远程异常。你能帮我确定每个错误意味着什么吗- 1) java.net网站。ConnectException:连接被拒绝“ 2)Java . net . socket time out异常:连接超时" 3) 连接异常: 连接超时”
问题内容: 我已经阅读了Python中的Class方法[什么用?但是这篇文章中的例子很复杂。我正在寻找一个清晰,简单,准系统的Python类方法用例的例子。 您能否列举一个小的特定示例用例,其中Python类方法将是完成此工作的正确工具? 问题答案: 初始化的辅助方法:
问题内容: 请帮忙。将来自扫描仪的提示显示到控制台后,出现此错误: 问题是来自printf吗?我检查了格式,它看起来正确。 这是程序: 问题答案: 答:因为您的格式说明符与方法中使用的输入参数不匹配。 使用而不是将值用作格式说明符 另外需要额外的逃脱角色 最后,删除不必要的点字符 阅读:Formatter javadoc
问题内容: 设计可能引发异常的单例类的最佳方法是什么? 在这里,我有一个Singleton(使用Bill Pugh的方法,在Wiki中为Singleton记录)。 如果在2处引发异常,我想将其传播给调用方。但是,我不能从第1行引发异常。 因此,如果单例对象创建不正确,我唯一的选择是返回空对象吗? 谢谢 PS我确实意识到,如果该Singleton通过不同的类加载器加载或反射加载,则可能会损坏,但是对