EAFP vs LBYL
两种处理错误/边界条件的编程风格,在 Python 社区尤为常见。 LBYL — Look Before You Leap(先检查再操作) 谚语来源: “Look Before You Leap” 字面意思是"跳跃之前,先看清脚下"。想象要跳过一条沟——不先看清落脚点就跳,可能会摔进坑里。引申为行动之前先确认条件是否安全,对应中文谚语"三思而后行"、“谋定而后动”。 在编程里,“leap”(跳跃)= 执行操作,“look”(看)= if 条件检查。 操作前先检查前提条件是否满足。 # LBYL 风格 if key in my_dict: value = my_dict[key] else: value = default if os.path.exists(filepath): with open(filepath) as f: data = f.read() 特点: 逻辑清晰,防御性强 存在 TOCTOU(Time-Of-Check-Time-Of-Use)竞态条件风险——检查和使用之间状态可能改变 代码中充满 if 判断,容易冗长 EAFP — Easier to Ask Forgiveness than Permission(先操作再处理异常) 短语来源: 这句话来自生活场景的比喻——想做某事时,与其事先去请示许可(可能被拒绝、很麻烦),不如直接去做,事后出了问题再道歉求谅解,因为道歉往往比请示更容易。 英文 字面意思 编程含义 Ask Permission 事先请求许可 用 if 检查条件是否满足 Ask Forgiveness 事后请求原谅 用 except 处理出错的异常 这个说法由 Python 之父 Guido van Rossum 推广,体现了 Python 的哲学:代码应该表达意图,而不是充满防御性检查。 ...