为何Pylint提示我的字典属性是未定义变量?
为啥Pylint说字典里的
name是未定义变量? 先看你这段代码里的问题行:
category = { name: 'test' }
虽然你的代码现在能运行,但Pylint的提示真的没冤枉你——这是个很容易踩的Python语法坑。
问题到底出在哪?
在Python的字典字面量里,如果你写name: 'test',Python会把冒号左边的name当成变量名来解析,而不是你以为的字符串键。也就是说,它会在当前作用域里找一个叫name的变量,但你的代码里根本没定义过这个变量——这就是Pylint报错的核心原因。
那为啥代码还能跑?
这绝对是巧合!大概率是你运行代码的环境里,恰好存在一个名为name的全局变量(比如某些交互式Python环境、或者你导入的某个库无意中定义了这个变量),Python找到了它,所以没直接抛出NameError。但换个干净的环境运行,这段代码肯定会直接报错崩溃。
怎么写才对?
如果你想让字典的键是字符串'name',必须给它加上引号,这才是Python里定义字符串键的标准写法:
category = { 'name': 'test' } # 用双引号也完全没问题 category = { "name": "test" }
补充个小知识:Python 3.7+支持一种“键省略引号”的写法,但仅限键是合法标识符且已经被定义为变量的场景,显然你这里不属于这种情况,所以引号绝对不能省。
最后提个醒
这种“碰巧能跑”的代码非常危险,属于依赖环境的脆弱写法。按照Pylint的提示修正后,代码不仅能通过检查,可读性和稳定性也会大大提升。
内容的提问来源于stack exchange,提问作者Scoob
相关产品推荐
相关产品推荐

