web-dev-qa-db-ja.com

Pycharmのインスペクターが「d = {}」について不満を言うのはなぜですか?

d = {} Pycharmのコードインスペクターで辞書を初期化すると、次のような警告が生成されます。

この辞書作成は、辞書リテラルとして書き直すことができます。

d = dict()に書き換えると、警告は消えます。 {}はすでにが辞書リテラルなので、メッセージが間違っていると確信しています。さらに、d = {}d = dict()の両方が有効でPythonicのようです。

この関連する質問は、選択は単にスタイル/好みの問題であると結論付けているようです: 「d = dict()」と「d = {}」の違い

Pycharmがd = {}について文句を言うのはなぜですか?

UPDATE:

マックはそれを打ちました。警告は、フラグが立てられたものだけでなく、実際には複数の行に適用されました。

Pycharmは、辞書を初期化し、辞書に値を設定する一連の連続したステートメントを探すようです。たとえば、これにより警告がトリガーされます。

d = {}
d['a'] = 1

しかし、このコードはそうではありません:

d = {}
pass
d['a'] = 1
181
Chris Sears

辞書宣言の次のコードは何ですか?

次のようなものがある場合、pycharmはエラーをトリガーすると思います:

dic = {}
dic['aaa'] = 5

あなたが書いたように

dic = {'aaa': 5}

ところで:関数を使用するとエラーがなくなるという事実は、pycharmがdict()がリテラルであると信じていることを必ずしも意味しません。それは単に文句を言わないことを意味するかもしれません:

dic = dict()
dic['aaa'] = 5

HTH!

233
mac

これは、プロジェクト設定またはデフォルト設定で無効にできます。

  • 設定->検査-> Pythonに移動します
  • 「辞書作成は辞書リテラルによって書き換えられる可能性があります」のチェックを外します
12
Craig Jackson

(私のように)単一の操作で辞書を初期化するのが好きな人向け

d = {
  'a': 12,
  'b': 'foo',
  'c': 'bar'
}

のような多くの行の代わりに

d = dict()
d['a'] = 12
d['b'] = ....

最終的に私はこれで終わった:

d = dict()
d.update({
  'a': 12,
  'b': 'foo',
  'c': 'bar'
})

Pycharmはこれについて文句を言っていません

8
Bird
mydict = {
  a: 5,
  b:z+c/2
}

辞書は、最初に初期化してから新しい値を再割り当てすることなく、直接作成できます。

0
Asnim P Ansari

私は、この警告が私を地獄に追いやっている状況にあります。私の場合、次のように、一部はリテラルとして、一部は関数によるタプル出力から辞書を作成しています。

def get_other_values():
    return 3, 4

foo = {
    "a": 1,
    "b": 2
}
foo["c"], foo["d"] = get_other_values()

そのため、get_other_valuesの出力用に暫定変数を作成しない限り、リテラルでdictを作成している場合でも、PEP8はこの警告を生成します。また、値がタプルとして出力されるため、リテラルにcキーとdキーを割り当てることはできません。

0
Chris Woodfield