Sve*_*ach 195
从词汇表:
比许可更容易请求宽恕.这种常见的Python编码风格假设存在有效的键或属性,并且如果假设被证明是错误则捕获异常.这种干净,快速的风格的特点是存在许多
try和except陈述.该技术与许多其他语言(如C)共有的LBYL风格形成对比.
一个例子是尝试访问字典密钥.
EAFP:
try:
x = my_dict["key"]
except KeyError:
# handle missing key
Run Code Online (Sandbox Code Playgroud)
LBYL:
if "key" in my_dict:
x = my_dict["key"]
else:
# handle missing key
Run Code Online (Sandbox Code Playgroud)
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")
Run Code Online (Sandbox Code Playgroud)
在此示例中,我们只是尝试打开文件,如果无法打开它,则会抛出一个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())
Run Code Online (Sandbox Code Playgroud)
我称之为"乐观编程".这个想法是,大多数时候人们会做正确的事情,错误应该很少.所以代码首先要发生"正确的事情",然后如果不这样做就抓住错误.
我的感觉是,如果用户要犯错误,他们应该是遭受时间后果的人.以正确方式使用该工具的人将加速通过.
| 归档时间: |
|
| 查看次数: |
27356 次 |
| 最近记录: |