首页 > 后端开发 > Python教程 > 请求宽恕,而不是许可:异常处理何时比先发制人的检查更好?

请求宽恕,而不是许可:异常处理何时比先发制人的检查更好?

Linda Hamilton
发布: 2024-12-30 21:59:14
原创
325 人浏览过

Ask Forgiveness, Not Permission: When Is Exception Handling Better Than Preemptive Checks?

“请求宽恕而不是许可”:技术解释

在编程中,短语“请求宽恕而不是许可”描述了两种截然不同的编码风格:

“请求许可”样式:

if can_do_operation():
    perform_operation()
else:
    handle_error_case()
登录后复制

“请求宽恕”样式:

try:
    perform_operation()
except Unable_to_perform:
    handle_error_case()
登录后复制

在“请求许可”方法中,存在 can_do_operation如果操作无法执行,() 检查会阻止执行 Perform_Operation() 调用。然而,这种方法依赖于 can_do_operation() 检查的准确性,这在动态环境中或处理外部资源时可能并不总是可靠。

“请求宽恕”的好处

“请求宽恕”风格提供了几种好处:

  • 处理并发情况:在多线程或多资源环境中,检查和操作之间的条件可能会发生变化,使得“请求许可”的方式失效。
  • 避免过度限制性检查:“请求许可”需要定义精确而全面的标准,可能具有挑战性且容易出错。 “请求宽恕”方法提供了更大的灵活性,并避免无意中排除有效操作。

示例:实例属性访问

在您的示例中,您询问在访问实例属性时如何使用“请求宽恕”。虽然通常被认为是程序员错误,但访问不存在的属性可能是有效的场景,例如在处理可选对象部分时。

而不是使用异常处理程序,检查属性是否不是 None 更Pythonic。对于可选属性,bar 属性通常最初初始化为 None 并设置为有意义的值(如果可用)。这允许进行以下测试:

if foo.bar is not None:
    handle_optional_part(foo.bar)
else:
    default_handling()
登录后复制

结论

“请求宽恕而不是许可”原则建议将异常作为程序执行的自然部分,特别是当处理可选功能或外部资源交互。它在动态和并发环境中提供了更大的灵活性和适应性,同时仍然通过异常处理机制启用错误处理。

以上是请求宽恕,而不是许可:异常处理何时比先发制人的检查更好?的详细内容。更多信息请关注PHP中文网其他相关文章!

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