说明
《Python 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
try语句用于异常处理,if语句用于条件判断。两者在语法、执行流程和使用场景上有较大不同。if语句是条件判断和代码执行的基础,try语句是异常处理的重要手段。
异常处理程序(try/except)相比显式的if条件要比较快,直到遇到异常为止。这意味着,如果发生任何异常,异常处理程序的耗时会比if版本的代码更长。这意味着决定代码执行速度的因素是所处理的问题类型。
我们经常听说Python总是鼓励EAFP(“求宽恕比求许可更容易”)的风格,而不是在C语言等大多数语言中使用的LBYL(“先看再跳”)风格。Python文档指出更容易求宽恕而不是求许可。这种常见的Python编码风格假设存在有效的键或属性,并在假设被证明是错误时捕获异常。这种干净、快速的风格以许多try和except语句为特征。这种技术与C等许多其他语言中常见的LBYL风格形成对比。
# if
if key in mydict:
mydict[key] += 1
else:
mydict[key] = 1
# try
try:
mydict[key] += 1
except KeyError:
mydict[key] = 1
通过我们的评估,我们得出以下结论。让我们考虑上面的例子,如果我们预期99%的情况下“value”的值不会等于0,我们可以使用try/except方法。如果异常确实是异常,那么它将更快。如果“value”变为0的可能性大于50%,那么使用“if”可能更好。
Python中的try和if语句用于不同的场景,主要区别如下:
try:
可能发生异常的代码
except:
如果异常发生,执行这块代码
if语句:
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
总结如下:
代码一(EAFP风格):
try:
判断代码
except 错误:
普通代码
代码二(LBYL风格):
if 判断代码:
普通代码
else:
普通代码
更新时间:Sept. 6, 2023, 3:57 p.m. 标签:python try if