【Python】 try except 还是 if else(EAFP 还是 LBYL 风格)

 

结论

● 若超过95%的可能不会进入except异常处理中,则使用代码一的样式(EAFP风格)

● 否则可以换成用代码二的样式(LBYL风格)

 

代码一EAFP风格):

try:
    判断代码
except 错误:
    普通代码

 

代码二LBYL风格):

if 判断代码:
    普通代码
else:
    普通代码

 

 


 

 

名词解释

EAFP (Easier to Ask for Forgiveness than Permission)

先try,反正出错也无所谓,except会出手

 

LBYL (Look Before You Leap)

想好再写,if else 安排上

 

 


 

 

分析

众所周知,在Python中,自带的 try except 这种异常处理语句比较"重",也就是性能不太好

但是,官方却推荐使用 EAFP (Easier to Ask for Forgiveness than Permission) 代码编写风格,也就是官方推荐使用 try except

那为啥不使用 LBYL (Look Before You Leap) 编写风格呢,也就是为啥不直接用 if else 这种简单明了性能还OK的方式呢

 

事实上,try 的性能并不差,不仅不差,还非常好,不输于 if else

但是 except 捕获异常非常消耗性能!

 

所以,

● 如果绝大多数情况下,不会进入异常处理分支的话,使用 try except 更好 EAFP

● 如果部分情况下,进入异常处理分支,那么换不换无所谓,都是一个量级的时间消耗,谁也别瞧不起谁

● 如果大部分情况下,进入异常处理分支,那么建议直接换成 if else LBYL

 

 


 

 

测试

比如最常遇见的 KeyError 异常,即:想访问字典中的某个键的值,但字典中没有这个值,就报这个错

EAFP 风格就是:直接访问这个键值对,有问题了用except捕获

LBYL 风格就是:先判断这个键是否存在于字典中,再进行访问

用官方库的计时工具的测试结果如下:(setup里面是初始化一些变量的操作,stmt里面是需要计时的代码)

 

 

其实就可以看出来:

● 性能上:直接从字典内取值 ≈ 判断键是否在字典内

● 性能上:直接从字典内取值 优于 try里面直接从字典内取值(不进入except) 优于 先判断键是否存在于字典中再进行访问

 

那结论就是:

● try 的性能并不差,不仅不差,还非常好,不输于 if else

● except 捕获异常的性能很不好

 

 

 

posted @   Alan_LJP  阅读(399)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示