为什么Pycharm的检查器抱怨“d = {}”?

214 投票
5 回答
97281 浏览
提问于 2025-04-17 07:50

当你用 d = {} 来初始化一个字典时,Pycharm 的代码检查工具会发出警告,内容是:

这个字典的创建可以用字典字面量来重写。

如果我把它改成 d = dict(),警告就消失了。因为 {} 本身就是一个字典字面量,所以我觉得这个提示可能是错误的。而且,d = {}d = dict() 都是有效的写法,符合 Python 的风格。

有一个相关的问题似乎得出的结论是,这只是风格或个人喜好的问题:“d = dict()” 和 “d = {}” 的区别

那么,为什么 Pycharm 会对 d = {} 提出警告呢?

更新:

Mac 指出了关键点。这个警告其实是针对多行代码的,而不仅仅是被标记的那一行。

Pycharm 似乎会检查一系列连续的语句,其中你初始化了一个字典,然后又给字典设置了值。例如,下面的代码会触发警告:

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

但这段代码就不会:

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

5 个回答

12

对于那些像我一样喜欢用一行代码来初始化字典的人

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对此没有任何抱怨

23

你可以在项目设置或默认设置中关闭这个功能。

  • 先去设置,找到检查项,然后选择Python。
  • 把“字典创建可以被字典字面量重写”前面的勾去掉。
268

在你声明字典之后的代码是什么?

我觉得如果你有类似下面的代码,PyCharm会报错:

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

因为你可能写了

dic = {'aaa': 5}

注意:如果你使用函数 dict(),错误就会消失。这并不一定意味着PyCharm认为 dict() 是一个字面量。它可能只是表示它对此没有抱怨:

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

撰写回答