gpt4 book ai didi

python - EAFP/LBYL 的并发影响

转载 作者:太空宇宙 更新时间:2023-11-03 11:11:45 25 4
gpt4 key购买 nike

在 Python 中编写并发/多线程代码时,遵循“请求宽恕比请求许可更容易”(EAFP)而不是“三思而后行”(LBYL)是否特别重要? Python 异常动态的特性意味着几乎任何事情(例如,属性删除)都可以在查找和跳跃之间发生——如果是这样,那有什么意义呢?例如,考虑

# LBYL
if hasattr(foo, 'bar'):
baz = foo.bar

对比

# EAFP
try:
baz = foo.bar
except AttributeError:
pass

在 LBYL 示例中,bar 属性可能会在实际调用 foo.bar 之前从 foo 中消失,您也一样从支票中得到什么?如果存在属性可能消失的风险,您无论如何都需要锁和/或 try/except 子句。

这里一个可能的论点是,这个例子做出了极其悲观的假设,即“对抗代码”正在运行,随时可能把地毯从你身下扯下来。在大多数用例中,这是极不可能的。

最佳答案

你的想法是正确的。补充几点:

如果该属性大部分时间都存在,try:except: 可能比LBYL 习语。

如果你不喜欢 try:except: 语法,你也可以这样写:

item = getattr(foo, 'bar', None)
if item is None:
....
else:
....

关于python - EAFP/LBYL 的并发影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/644052/

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