11.6 【代码美化】择优选择 EAFP 和 LBYL 代码风格

1. EAFP 风格

Python 有一套自己的哲学,其中 EAFP 是其中比较有名的。它的全称是

Easier to Ask for Forgiveness than Permission

强行翻译一下,就是 寻求原谅比获得授权更容易

对于第一次接触这个 EAFP 名词的同学,可能不好理解这句话的意思。

没有关系,咱先看一下 EAFP 风格的代码是什么样的,你就能立马 get 了。

下面这段代码,我在 try 里使用 [key] 的方法获取字典一个 value 值,但是由于 profile 并没有 age 的键。所以会抛出异常。

profile = {"name": "王炳明"}
try:
    print(profile["age"])
except KeyError:
    print("Key is not exist")

像这种,先相信代码本身没有问题,任其执行,有问题了再通过捕获进行处理的代码风格,就叫做 EAFP 风格。

我个人把这种写法,称之为 面向崩溃编程

2. LBYL 风格

LBYL 的全称是

Look Before You Leap

翻译一下,就是 你跳之前先看看,这是一种比较保守的写法。这种写法可能会有让你写很多的 if 判断语句来规避可能出现错误的各种场景。

还是以上面的代码为例,使用 LBYL 风格来写的话,是这样的

profile = {"name": "王炳明"}
if "age" in profile:
    print(profile["age"])
else:
    print("Key is not exist")

3. 选择哪种风格?

用一个生动的例子来描述他们的区别。

有一对小伙伴一起约去某名山游玩,由于这座山比较险峻,有各种各校的悬崖。

伙伴A,是一个比较大胆开放的人,他自己穿上了降落伞,所以在游玩的时候,无所顾忌,都不看路,一旦不小心跌落悬崖了也有降落伞保命。 – 这是 EAFP 风格

而伙伴B,是一个比较保守的人,他没有穿降落伞,所以每走一走都要看一看,前面是不是悬崖。– 这是 LBLY 风格

EAFP虽然是 Python 比较推荐的一种编码风格,但更多情况下,这两种风格会同时存在于你的代码中代码风格的目的是增强代码的可读性和健壮性,在有些场景下 EAFP 风格更加易读,在有些场景下 LBLY 风格更加易读,因此不必纠结使用哪种风格,具体情况应该具体分析。