什么是Python 中的EAFP 哲学

简介: 什么是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…开始

目录
相关文章
|
API Python 容器
再探泛型 API,感受 Python 对象的设计哲学
再探泛型 API,感受 Python 对象的设计哲学
237 2
|
开发框架 并行计算 .NET
脑洞大开!Python并发与异步编程的哲学思考:IO密集型与CPU密集型任务的智慧选择!
脑洞大开!Python并发与异步编程的哲学思考:IO密集型与CPU密集型任务的智慧选择!
339 1
|
存储 JSON API
实战派教程!Python Web开发中RESTful API的设计哲学与实现技巧,一网打尽!
在数字化时代,Web API成为连接前后端及构建复杂应用的关键。RESTful API因简洁直观而广受欢迎。本文通过实战案例,介绍Python Web开发中的RESTful API设计哲学与技巧,包括使用Flask框架构建一个图书管理系统的API,涵盖资源定义、请求响应设计及实现示例。通过准确使用HTTP状态码、版本控制、错误处理及文档化等技巧,帮助你深入理解RESTful API的设计与实现。希望本文能助力你的API设计之旅。
441 3
|
开发框架 并行计算 .NET
脑洞大开!Python并发与异步编程的哲学思考:IO密集型与CPU密集型任务的智慧选择!
【7月更文挑战第18天】在Python中,异步编程(如`asyncio`)适合处理IO密集型任务,通过非阻塞操作提高响应性,例如使用`aiohttp`进行异步HTTP请求。而对于CPU密集型任务,由于GIL的存在,多进程(`multiprocessing`)能实现并行计算,如使用进程池进行大量计算。明智选择并发模型是性能优化的关键,体现了对任务特性和编程哲学的深刻理解。
317 2
|
存储 JSON API
实战派教程!Python Web开发中RESTful API的设计哲学与实现技巧,一网打尽!
【7月更文挑战第22天】构建RESTful API实战:**使用Python Flask设计图书管理API,遵循REST原则,通过GET/POST/PUT/DELETE操作处理/books及/books/<id>。示例代码展示资源定义、请求响应交互。关键点包括HTTP状态码的使用、版本控制、错误处理和文档化。本文深入探讨设计哲学与实现技巧,助力理解RESTful API开发。
293 0
|
数据采集 机器学习/深度学习 人工智能
Python:现代编程的首选语言
Python:现代编程的首选语言
1760 102
|
数据采集 机器学习/深度学习 算法框架/工具
Python:现代编程的瑞士军刀
Python:现代编程的瑞士军刀
560 104
|
人工智能 自然语言处理 算法框架/工具
Python:现代编程的首选语言
Python:现代编程的首选语言
457 103
|
机器学习/深度学习 人工智能 数据挖掘
Python:现代编程的首选语言
Python:现代编程的首选语言
472 82

推荐镜像

更多