编程中的“请求宽恕而不是许可”
“请求宽恕而不是许可”这句话经常被用来描述一种偏爱的编程风格简单性和鲁棒性高于正确性。这种风格基于这样的想法:捕获异常并优雅地处理它们比试图预测每一个可能的失败并编写代码来防止它更好。
请求许可与请求宽恕
在“请求许可”风格中,代码的编写方式是在执行任何可能导致异常的操作之前检查可能导致异常的条件在一个例外中。例如:
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中文网其他相关文章!