なぜこれがKeyErrorをスローするのですか?
d = dict()
d['xyz']
しかし、これはそうではありませんか?
d = dict()
d.get('xyz')
ここで記述子が役割を果たすかどうかも知りたいです。
これは単にget()
メソッドが定義される方法です。
から Python docs :
キーがディクショナリにある場合はキーの値を返し、それ以外の場合はデフォルトを返します。 defaultが指定されていない場合、デフォルトでNoneに設定されるため、このメソッドでKeyErrorが発生することはありません。
デフォルトの「not-found」戻り値はNone
です。他のデフォルト値を返すことができます。
d = dict()
d.get('xyz', 42) # returns 42
角かっこによるアクセスにはデフォルトがありませんが、get
メソッドにはデフォルトがあり、デフォルトはNone
です。 getのドキュメントから(a = dict(); help(a.get)
経由)
Help on built-in function get:
get(...)
D.get(k[,d]) -> D[k] if k in D, else d. d defaults to None.
あなたの最初の質問はよく答えられていると私は信じていますが、私はへの応答を見ていません
ここで記述子が役割を果たすかどうかも知りたいです。
技術的には、記述子doはここで役割を果たします。これは、すべてのメソッドが記述子を使用して暗黙的に実装されているためですが、使用されている明確な明示的な記述子はなく、質問している動作とは関係ありません。
[1]キーがマップになく、[2]これら2つの操作は性質が異なるという理由だけで。
から dict マッピングタイプ:
d[key]
Dのアイテムをキーキーで返します。キーがマップにない場合、KeyErrorを発生させます。
get(key[, default])
キーがディクショナリにある場合はキーの値を返し、それ以外の場合はデフォルトを返します。 defaultが指定されていない場合、デフォルトでNoneに設定されるため、このメソッドでKeyErrorが発生することはありません。