首页 > 后端开发 > Python教程 > 请求宽恕,而不是许可:这种编程风格何时合适?

请求宽恕,而不是许可:这种编程风格何时合适?

Susan Sarandon
发布: 2024-12-15 09:21:12
原创
978 人浏览过

Ask Forgiveness, Not Permission: When Is This Programming Style Appropriate?

编程中的“请求宽恕而不是许可”

“请求宽恕而不是许可”这句话经常被用来描述一种偏爱的编程风格简单性和鲁棒性高于正确性。这种风格基于这样的想法:捕获异常并优雅地处理它们比试图预测每一个可能的失败并编写代码来防止它更好。

请求许可与请求宽恕

在“请求许可”风格中,代码的编写方式是在执行任何可能导致异常的操作之前检查可能导致异常的条件在一个例外中。例如:

if os.path.exists(filename):
    with open(filename) as f:
        data = f.read()
else:
    raise FileNotFoundError(f"File {filename} not found.")
登录后复制

在“请求宽恕”风格中,编写代码只是为了尝试执行操作并捕获可能发生的任何异常:

try:
    with open(filename) as f:
        data = f.read()
except FileNotFoundError:
    print(f"File {filename} not found.")
登录后复制

为什么首选“请求宽恕”

“请求宽恕”主要有两个原因样式通常优于“请求许可”样式:

1。并发问题:

在并发环境中,例如多线程程序或与外部资源交互的程序,系统的状态可能会在进行权限检查时和执行权限检查时发生变化。当执行该操作时。这可能会导致错误的结果或不必要的异常抛出。

2.过度限制的权限检查:

权限检查可能过度限制,阻止代码执行实际可能的操作。例如,如果文件是在检查之后但在打开操作之前创建的,则在打开文件之前检查文件是否存在可能会失败。

何时使用“请求宽恕”

“请求宽恕”风格适用于以下情况:

  • 操作可能会在可预测和可恢复的情况下失败
  • 检查权限的成本很高。
  • 权限检查可以在检查时间和操作时间之间发生变化。

示例

问题中提供的示例演示了“请求宽恕”的正确用法 风格。如果稍后设置该属性,则在访问 bar 属性之前检查该属性是否存在可能会失败。相反,代码应该简单地尝试访问属性并捕获可能发生的任何 AttributeError 异常。

需要注意的是,“请求宽恕”风格并不意味着编码人员应该马虎或编写这样的代码很容易出现异常。相反,它表明最好是优雅地处理异常,而不是试图预测每一个可能的失败。

以上是请求宽恕,而不是许可:这种编程风格何时合适?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板