什么是Python 中的EAFP 哲学
时间:2022-07-24
本文章向大家介绍什么是Python 中的EAFP 哲学,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
摄影:产品经理
产品经理心心念念的海胆水饺
Python 有一套自己的哲学,其中 EAFP 是其中比较有名的。它的全称是Easier to Ask for Forgiveness than Permission——寻求原谅比获得授权更容易
。
在开发的过程中,我们经常遇到需要多次判断的情况,比如说,使用 requests请求一个接口,首先要判断请求返回的HTTP Code是不是200,接下来要判断请求返回的数据是不是 JSON 格式,接下来要判断数据解析成字典以后,里面有没有某个字段:
import json
import requests
resp = requests.get('https://xxx.com/xxx')
if resp.status == 200:
resp_text = resp.content.decode('utf-8')
if resp_text.startswith('{'):
resp_info = json.loads(resp_text)
if 'data' in resp_info:
data = resp_info['data']
print(data)
这种写法,会带来大量的 if 判断。而且 if 嵌套也会导致代码很难看。
但是如果使用 EAFP 哲学来写代码,就变得非常简单了:
import requests
try:
resp_info = requests.get('https://xxx.com/xxx').json()
data = resp_info['data']
print(data)
except Exception:
print('请求失败')
EAFP 哲学让你在写代码的过程中,先假设条件成立。如果不成立,用 try…except 把异常捕获住即可。
与 EAFP 相对应的是 LBYL:Look Before You Leap——你跳之前先看看
。这种开发风格一般适用于 C 语言。也就是在各种操作之前频繁用 if 先做检查。
当然,EAFP虽然是 Python 推荐的一种编码风格,但使用的时候还是需要看具体情况。我们日常生活中,经常听到某某渣男追女神一直追不上,于是直接把事情办了,再跪下来一边打自己脸,一边哭,一边求原谅。结果竟然有不少人能得到了原谅。所以说,EAFP 有用是有用,但是不应该在什么地方都用。
我之前有一批文章就特别讲到了,不应该滥用 try … except: 脱离苦海,从避免滥用try…except…开始。
- React-Native组件之 TabBarIOS和TabBarIOS.Item
- [先行者周日课程-0305] web前端组件 之 拖动窗口
- react-native城市列表组件
- [前端常见病] 之 后端数据还没有,前端怎么进行?
- dependencies与devDependencies的区别
- [先行者课程] -- 用js实现倒计时功能的业务逻辑
- iOS如何实现多个环境一次打包
- 从原理到策略算法再到架构产品看推荐系统 | 附Spark实践案例
- MobX 在 React Native开发中的应用
- RCTEventEmitter使用
- Google V8 引擎
- 揭秘前端字符的戏精之路
- 跨语言嵌入模型的调查
- React Native如何消除启动时白屏
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法