2012-07-06 22 views
84

在Python中,“使用EAFP原理”的含义是什么?你能提供任何例子吗?Python中的EAFP原理是什么?

+7

不根据Guido:https://mail.python.org/pipermail/python-dev/2014-March/133118.html – 2016-04-13 06:51:29

回答

143

glossary

更容易请求原谅比许可。这种常见的Python编码风格假定存在有效的键或属性,并且如果假设证明是错误的,则捕获异常。这种干净而快速的风格的特点是存在许多tryexcept陈述。该技术与许多其他语言(例如C)共用的LBYL style形成对比。

一个示例是尝试访问字典密钥。

EAFP:

try: 
    x = my_dict["key"] 
except KeyError: 
    # handle missing key 

LBYL:

if "key" in my_dict: 
    x = my_dict["key"] 
else: 
    # handle missing key 

的LBYL版本有搜索的字典里面的键两次,也可能略少可读性考虑。

+4

简短的很好的例子。 – 2012-07-06 11:12:09

+14

一个增强将是另一个优点是避免竞争条件...例如,只是尝试打开一个文件,如果你得到它,你明白了。而不是看到*,如果你能得到它*,然后试图得到它,并意识到在检查和访问试图之间的极小时间内,你可以更长时间地获得它。 – 2012-07-06 12:17:05

+18

Python还提供了一种避免这两种情况的方法,如果处理程序仅在键不存在时为'x'分配默认值:'x = mydict.get('key')'将返回None '如果'key'不在'my_dict'中;你也可以执行'.get('key',)',然后如果键不在字典中,那么x将被赋值。 'dict.setdefault()'和'collections.defaultdict'是避免代码过多的好方法。 – JAB 2012-07-13 17:29:38