python怎么将if和try⼀起⽤_在python中使⽤tryvsif
你经常听到Python⿎励EAFP风格(“请求原谅⽐请求许可更容易”)⽽不是LBYL风格(“三思⽽后⾏”)。对我来说,这是⼀个效率和可读性的问题。
在您的⽰例中(假设函数不是返回⼀个列表或空字符串,⽽是返回⼀个列表或None),如果您希望result99%的时间实际上包含⼀些可iterable,我将使⽤try/except⽅法。如果异常真的是异常的话,速度会更快。如果result超过50%的时间,那么使⽤if可能更好。
为了⽀持这⼀点,需要进⾏⼀些测量:>>> import timeit
>>> timeit.timeit(setup="a=1;b=1", stmt="a/b") # no error checking
0.06379691968322732
>>> timeit.timeit(setup="a=1;b=1", stmt="try:\n a/b\nexcept ZeroDivisionError:\n pass")
0.0829463709378615
>>> timeit.timeit(setup="a=1;b=0", stmt="try:\n a/b\nexcept ZeroDivisionError:\n pass")
0.5070195056614466
>>> timeit.timeit(setup="a=1;b=1", stmt="if b!=0:\n a/b")
0.11940114974277094
python的try和except用法>>> timeit.timeit(setup="a=1;b=0", stmt="if b!=0:\n a/b")
0.051202772912802175
因此,尽管if语句总是要花费您的成本,但⼏乎可以⾃由设置try/except块。但当实际发⽣Exception时,成本要⾼得多。
道德:使⽤try/except进⾏流量控制是完全可以的(和“pythonic”)
但当Exceptions实际上是异常的时,这是最有意义的。
从Python⽂档:EAFP
Easier to ask for forgiveness than
permission. This common Python coding
style assumes the existence of valid
keys or attributes and catches
exceptions if the assumption proves
false. This clean and fast style is
characterized by the presence of many
try and except statements. The
technique contrasts with the LBYL
style common to many other languages
such as C.
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论