2012-07-06 3 views

答えて

143

許可よりも許しを求めることが容易。この共通の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

短い例です。 –

+14

強化されたもう一つの利点は、競争条件の回避です...例えば、単にファイルを開こうとするなど、あなたがそれを手に入れることができます。あなたが*それを得ることができるかどうかを見るのではなく、その後それを取得しようとすると、チェックとアクセスattempの間のごくわずかな時間で、あなたはそれを得ることができます。 –

+18

Pythonは、キーが存在しないときにハンドラが単に 'x'にデフォルト値を代入している場合、それらの両方を避ける方法も提供します:' x = mydict.get( 'key') 'は' None '' key''が 'my_dict'になければ'; '.get( 'key'、)'を実行して、キーが辞書にない場合はxに何かが割り当てられます。 'dict.setdefault()'と 'collections.defaultdict'は余分なコードを避けるための素晴らしいものです。 – JAB