Python使用异常进行控制流被认为是不好的吗?

Python使用异常进行控制流被认为是不好的吗?,第1张

Python使用异常进行控制流被认为是不好的吗?

因为结束生成器不是一个常见事件(我知道它会一直发生,但只会发生 一次
)。抛出异常被认为是昂贵的。如果某个事件将在99%的时间内成功完成而在1%的时间内失败,那么使用try /
except可能比检查是否可以访问该数据要快得多(要求宽恕比允许容易)。

由于使用这样的try / except块可能很难理解,因此也存在一些偏见。流量控制可能很难遵循,而if / else更简单。try /
except意味着您必须在try 调用的函数内部跟踪语句的流控制(因为它们可能会引发异常,并且可能向上传播。if/
else只能在以下位置分支:语句被评估。

有时使用try / except是正确的,而使用if / else更有意义。它们每个都有性能成本。考虑:

a = <some dictionary>if key in a:    print a[key]

a = <some dictionary>try:    print a[key]except KeyError:    pass

如果key在a内不存在,则第一个会变快,如果存在,则只会稍慢(几乎不明显)。如果键确实存在,则第二个将更快,但如果不存在,则第二个将慢得多。如果密钥几乎总是存在,则选择第二个。否则,第一个效果更好。

编辑:只需添加一点有关Python try / except的知识,就可以极大地解决可读性问题之一。

考虑从文件中读取。

f = Nonetry:    f = open(filename, 'r')    ... do stuff to the file ...except (IOError, OSError):    # I can never remember which one of these Python throws...    ... handle exception ...finally:    if f:        f.close()

现在,容器中的任何东西都

do stuff to thefile
可能引发异常,我们将抓住它。通常,由于这个原因,您尝试在尝试中保留尽可能少的代码。Python
else
为try提供了一个可选的子句,只有在try运行完成而没有遇到异常的情况下,该子句才会运行。

f = Nonetry:    f = open(filename, 'r')except (IOError, OSError):    passelse:    ... do stuff to the file ...finally:    if f:        f.close()

在这种情况下,您不会遇到任何可读性问题,因为尝试中只有一条语句;这是python标准库函数调用,您只捕获特定的异常。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5644844.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存