web-dev-qa-db-fra.com

Pourquoi l'inspecteur de Pycharm se plaint-il de "d = {}"?

Lors de l’initialisation d’un dictionnaire avec d = {}, L’inspecteur de code de Pycharm génère un avertissement indiquant que

Cette création de dictionnaire pourrait être réécrite comme un dictionnaire littéral.

Si je le réécris d = dict(), l'avertissement disparaît. Puisque {} Déjà est un dictionnaire littéral, je suis presque sûr que le message est erroné. De plus, il semble que d = {} Et d = dict() soient valides et Pythonic.

Cette question connexe semble conclure que le choix est simplement une question de style/préférence: différences entre "d = dict ()" et "d = {}"

Pourquoi Pycharm se plaindrait-il de d = {}?

UPDATE:

Mac l'a cloué. L’avertissement s’applique réellement à plusieurs lignes, pas seulement à celle qui a été marquée.

Pycharm semble rechercher une séquence d'instructions consécutives dans lesquelles vous initialisez un dictionnaire, puis définissez des valeurs dans le dictionnaire. Par exemple, cela déclenchera l’avertissement:

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

Mais ce code ne va pas:

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

Quel est le code suivant dans votre déclaration de dictionnaire?

Je pense que pycharm déclenchera l'erreur si vous avez quelque chose comme:

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

comme vous auriez pu l'écrire

dic = {'aaa': 5}

BTW: Le fait que l'erreur disparaisse si vous utilisez la fonction ne signifie pas nécessairement que pycharm croit que dict() est littéral. Cela pourrait simplement signifier qu'il ne se plaint pas pour:

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

HTH!

233
mac

Cela peut être désactivé dans les paramètres du projet ou les paramètres par défaut.

  • Accédez à Paramètres -> Inspections -> Python.
  • Décocher "la création de dictionnaire pourrait être réécrite par le dictionnaire littéral"
12
Craig Jackson

pour ceux qui aiment (comme moi) initialiser des dictionnaires en une seule opération

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

au lieu de nombreuses lignes comme

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

à la fin j'ai fini avec ceci:

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

Pycharm ne se plaint pas à ce sujet

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

Le dictionnaire aurait pu être créé directement sans les initialiser, puis pour réaffecter de nouvelles valeurs.

0
Asnim P Ansari

Je me trouve dans une situation où cet avertissement me dérange. Dans mon cas, je remplis mon dict partiellement comme littéral et partiellement à partir d'une sortie Tuple par une fonction, comme ceci:

def get_other_values():
    return 3, 4

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

Ainsi, à moins que je ne crée des vars intermédiaires pour la sortie de get_other_values, PEP8 génère cet avertissement même si je crée le dict avec des littéraux. Et je ne peux pas assigner les touches c et d dans le littéral, car les valeurs sont sorties sous forme de tuple.

0
Chris Woodfield