📜  Python中的EAFP原理

📅  最后修改于: 2022-05-13 01:54:49.746000             🧑  作者: Mango

Python中的EAFP原理

EAFP 是Python社区中的一条 gem 建议,其他社区的程序员可能不熟悉。很快, EAFP“请求宽恕比许可更容易”意味着对您正在处理的代码持乐观态度,如果抛出异常,请抓住它并在以后处理它。

它不同于传统的LBYL方法或“跳前检查” ,在这种方法中,当且仅当没有错误时,您检查您的代码是否会成功并继续。

示例:假设您要打开一个文件并读取其内容。

“许可”代码:

import os
  
  
# Race condition
File_name ="test.txt"
  
if os.access(File_name, os.R_ok):
    with open(File_name) as f:
        print(f.read())
else:
    print("No such file accessed") 

当您请求读取文件的权限时,答案是“是”,但是当您实际阅读时,答案已经改变。这是您向竞赛条件敞开心扉的地方。

“宽恕”代码:您应该做的是继续流程并请求宽恕,即使用异常处理捕获错误。

# No Race condition
File_name ="test.txt"
  
try:
    f = open(File_name)
except IOError:
    print("No such file accessed") 
else:
    with f:
        print(f.read())

EAFP 方法的优点:

  • 显式优于隐式
  • 失败,但失败快,成功快
  • 失败,但失败便宜
  • 不要重复自己