2012-07-06 23 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