摄影:产品经理 产品经理心心念念的海胆水饺 Python 有一套自己的哲学,其中 EAFP 是其中比较有名的。...但是如果使用 EAFP 哲学来写代码,就变得非常简单了: import requests try: resp_info = requests.get('https://xxx.com/xxx'...与 EAFP 相对应的是 LBYL:Look Before You Leap——你跳之前先看看。这种开发风格一般适用于 C 语言。也就是在各种操作之前频繁用 if 先做检查。...当然,EAFP虽然是 Python 推荐的一种编码风格,但使用的时候还是需要看具体情况。我们日常生活中,经常听到某某渣男追女神一直追不上,于是直接把事情办了,再跪下来一边打自己脸,一边哭,一边求原谅。...所以说,EAFP 有用是有用,但是不应该在什么地方都用。 我之前有一批文章就特别讲到了,不应该滥用 try … except: 脱离苦海,从避免滥用try…except…开始。
本文含 2019 字,2 图表截屏 建议阅读 6 分钟 本文是听说你会玩 Python 系列的第四篇 1 - 六酷技巧 2 - 99% 的人会做错的题 3 - 深挖变量 4 - LBYL vs EAFP...引言 写了 Python 这么久,是不是对 LBYL 和 EAFP 这两个缩写还一无所知?...4 总结 总结一下: LBYL 是先检查再执行,用 if-else 语句 EAFP 是不检查出了错再处理,用 try-except 语句 Python 更推荐 EAFP,因为 它可读性更强。...想想 EAFP 只有在出现异常的时候才处理错误,而 LBYL 需要每次运行前都要检查。 其实从 Java 转过来的同学应该更习惯 LBYL 。...LBYL 和 EAFP 是两种编程风格,或两种编程哲学,没有对或不对,只有喜欢或不喜欢。 Stay Tuned! ?
基本目录结构: 1 基本编程习惯 1.1 多余的空格 1.2 是否为 None 判断 1.3 lamda 表达式 1.4 最小化受保护代码 1.5 保持逻辑完整性 1.6 使用语义更加明确的方法 2 EAFP...那么,EAFP防御风格有何问题呢?它主要会带来一些我们不想出现的副作用。...其实,除了以上EAFP防御性编程风格外,还有一种编程风格与它截然不同,它虽然能很好的解决EAFP的副作用,但是缺点更加明显,所以Python中不太提倡大量的使用此种风格。...') 使用LBYL来写就是如下这样: if 'c' in d: val = d['c'] else: print('key not existence') EAFP风格的代码如下:...结论:就Python语言,推荐使用EAFP风格,个别受保护的块,若无法实现原子操作的地方可以使用LBYL风格。
Python 遵循的是 EAFP (请求原谅比请求允许更容易)而不是 LBLY (三思而后行)的哲学。EAFP 与“鸭子类型”风格有些联系。...鸭子类型如何支持 EAFP 鸭子类型是最适合 EAFP 的风格,因为我们不需要关注对象的“打字”。我们只需要照顾它的行为和功力。让我们看看下面的陈述。...但是如果我们看到大量的尝试——除了块,那么它很可能是一个 EAFP 编码器。
EAFP(Easier to Ask Forgiveness than Permission)和LBYL(Look Before Your Leap) EAFP(Easier to Ask Forgiveness...通过应用EAFP规则,如果我们想更进一步,我们可以简单地使用try ... except编写特定的代码。用语句来处理代码可能引发的潜在异常的问题。即先考虑发生哪些意外情况,事后再进行处理。...以下代码段显示了使用EAFP与LBYL的可能方案。使用EAFP编码样式,我们只需在try…except语句中包装我们的代码和可能的异常,而使用LBYL编码样式,我们必须使在之前验证适用条件。...如您所见,EAFP代码看起来很干净,而没有创建嵌套结构。当然,我们也可以在项目中应用LBYL。...其他重要的编码原理包括DRY和EAFP。如果愿意,也可以在编码中做一些LBYL。LEGB规则和MRO将帮助我们了解如何解析变量,属性和函数以使代码的预期运行效果。
❤️❤️EAFP: It's Easier to Ask Forgiveness than Permission. "事后获取原谅比事前获取许可更容易". 也就是先操作, 遇到问题再处理....优势:正常流程和错误流程是分离开的, 程序员更关注正常流程,代码更清晰,容易理解代码 所以我们在进行处理时基本都是用EAFP,很少用LBYL。
编译时出现的语法性错误,不能称之为异常 运行时指的是程序已经编译通过得到class 文件了, 再由 JVM 执行过程中出现的错误 四、异常的处理 防御式编程LBYL:在操作之前就做充分的检查 事后认错型:EAFP...先操作, 遇到问题再处理 注:异常处理的核心思想就是 EAFP 在Java中,异常处理主要的5个关键字:throw、try、catch、final、throws throw关键字:抛出一个指定的异常对象
Java异常详解 前言 一、异常类的定义 Java异常 异常类的构成 Java常见运行错误 异常示例 除以 0 数组下标越界 访问 null 对象 防御式编程 异常的好处 LBYL 风格的代码 EAFP...EAFP: It’s Easier to Ask Forgiveness than Permission. “事后获取原谅比事前获取许可更容易”. 也就是先操作, 遇到问题再处理....异常的核心思想就是 EAFP. 异常的好处 例如, 我们用伪代码演示一下开始一局王者荣耀的过程. LBYL 风格的代码 boolean ret = false; ret = 登陆游戏(); if (!...EAFP 风格的代码 try { 登陆游戏(); 开始匹配(); 游戏确认(); 选择英雄(); 载入游戏画面(); ... } catch (登陆游戏异常
EAFP: It’s Easier to Ask Forgiveness than Permission. “事后获取原谅比事前获取许可更容易”. 也就是先操作, 遇到问题再处理....第二种方式 EAFP:直接先把手拉上,她要是甩开了再说其他的,要是没拒绝就拉着呗。 这就是”事后获取原谅比事前获取许可更容易“. 也就是先操作, 遇到问题再处理. 了解即可,不用特别去记忆。...EAFP 风格的代码 ? 在这里我们能体会到Java 风格的代码异常处理 ?
防御性编程中的LBYL和EAFP Try/catch or validation for speed?
EAFP: It's Easier to Ask Forgiveness than Permission. "事后获取原谅比事前获取许可更容易". 也就是先操作, 遇到问题再处理....处理选择英雄异常; } catch (载入游戏画面异常) { 处理载入游戏画面异常; } 优势:正常流程和错误流程是分离开的, 程序员更关注正常流程,代码更清晰,容易理解代码 异常处理的核心思想就是 EAFP
EAFP: It’s Easier to Ask Forgiveness than Permission. “事后获取原谅比事前获取许可更容易”. 也就是先操作, 遇到问题再处理....优势:正常流程和错误流程是分离开的, 程序员更关注正常流程,代码更清晰,容易理解代码 异常处理的核心思想就是 EAFP。
ret) { 处理载入游戏错误; return; } 缺陷:正常流程和错误处理流程代码混在一起, 代码整体显的比较混乱 EAFP: It’s Easier to Ask Forgiveness than
EAFP: It's Easier to Ask Forgiveness than Permission. "事后获取原谅比事前获取许可更容易". 也就是先操作, 遇到问题再处理....优势: 正常流程和错误流程是分离开的, 程序员更关注正常流程,代码更清晰,容易理解代码 异常处理的核心思想就是 EAFP.
而往往会采用 hasattr() 检测或是 EAFP 编程。 EAFP “求原谅比求许可更容易”的英文缩写。...此风格与 EAFP 方式恰成对比,其特点是大量使用 if 语句。 在多线程环境中,LBYL 方式会导致“查看”和“跳跃”之间发生条件竞争风险。...这种问题可通过加锁或使用 EAFP 方式来解决。 list -- 列表 Python 内置的一种 sequence。
Python 具备完善的异常(Exception)机制,并且在某种程度上鼓励我们使用异常(官方文档关于 EAFP 的说明)。所以,使用异常来进行错误流程处理才是更地道的做法。
甚至在官方 Python 术语表中都有一个缩略语/口号来记录这一点: EAFP 宽恕比许可更容易。这种常见的 Python 编码风格假设存在有效的键或属性,并在假设被证明为假时捕获异常。...这种风格与EAFP方法形成对比,其特点是存在许多 if 语句。在多线程环境中,LBYL 方法可能会在“观察”和“跳转”之间引入竞争条件。...这个问题可以通过使用锁或使用 EAFP 方法来解决。 鉴于 EAFP 风格,了解并善于使用try/except语句中的else块更有意义。...Python 速查手册,第 3 版,由马特利等人编写,有一章关于异常,对 EAFP 风格进行了出色的讨论,归功于计算先驱格雷斯·霍珀创造了“宽恕比许可更容易”的短语。
领取专属 10元无门槛券
手把手带您无忧上云