Python中的EAFP原理是什么?
- 2024-11-26 08:36:00
- admin 原创
- 143
问题描述:
Python 中“使用 EAFP 原理”是什么意思?你能举个例子吗?
解决方案 1:
来自词汇表:
请求原谅比请求许可更容易。这种常见的 Python 编码风格假设存在有效的键或属性,并在假设被证明为假时捕获异常。这种简洁快速的风格的特点是存在许多
try
and语句。该技术与许多其他语言(如 C)中常见的LBYL 风格except
形成对比。
一个例子是尝试访问字典键。
东非法裔美国人协会(EAFP):
try:
x = my_dict["key"]
except KeyError:
# handle missing key
左上角箭头:
if "key" in my_dict:
x = my_dict["key"]
else:
# handle missing key
LBYL 版本必须在字典中搜索键两次,并且可能被认为可读性稍差。
解决方案 2:
我将尝试用另一个例子来解释它。
这里我们尝试访问该文件并在控制台中打印内容。
LBYL——三思而后行:
我们可能想检查是否可以访问该文件,如果可以,我们将打开它并打印内容。如果我们无法访问该文件,我们将执行该else
操作。这是一个竞争条件,因为我们首先进行访问检查。当我们到达时,with open(my_file) as f:
可能由于某些权限问题(例如,另一个进程获得了独占文件锁),我们无法再访问它。此代码可能会引发错误,而我们无法捕获该错误,因为我们认为我们可以访问该文件。
import os
my_file = "/path/to/my/file.txt"
# Race condition
if os.access(my_file, os.R_OK):
with open(my_file) as f:
print(f.read())
else:
print("File can't be accessed")
EAFP - 请求原谅比请求许可更容易:
在这个例子中,我们只是尝试打开文件,如果无法打开,它会抛出一个IOError
。如果可以,我们会打开文件并打印内容。所以我们不是询问,而是尝试去做。如果成功了,那就太好了!如果不成功,我们会捕获错误并处理它。
# # No race condition
try:
f = open(my_file)
except IOError as e:
print("File can't be accessed")
else:
with f:
print(f.read())
解决方案 3:
我称之为“乐观编程”。这个想法是,大多数时候人们都会做正确的事情,错误应该很少。因此,首先编写代码以使“正确的事情”发生,然后如果没有发生,再捕获错误。
我的感觉是,如果用户犯了错误,他们应该承担时间后果。正确使用工具的人会加快速度。
相关推荐
热门文章
项目管理软件有哪些?
热门标签
云禅道AD