Python 3.8读取csv时报TypeError: 'dict' object is not callable
错误原因
触发TypeError: 'dict' object is not callable是命名冲突导致的变量遮蔽问题:
- 你定义的类名为
item - 在
instantiate_from_csv类方法的循环逻辑中,写了for item in items:,这里的循环变量item覆盖了外层作用域的类名item - 循环内你本意是调用
item类生成实例,但此时item已经指向csv读取到的单条字典数据,字典对象不能被当作函数/类调用,因此抛出类型错误。
修复方法
修改循环变量名,避免和类名重名,同时类方法内优先用传入的cls参数指代当前类(符合类方法的编码规范),修正后的instantiate_from_csv方法代码如下:
@classmethod def instantiate_from_csv(cls): with open('items.csv', 'r') as f: reader = csv.DictReader(f) items = list(reader) for item_data in items: cls( name=item_data.get('name'), price=float(item_data.get('price')), quantity=int(item_data.get('quantity')), )
额外编码规范提示:Python类名推荐使用大驼峰命名格式,可将类名从item改为Item,从命名习惯上减少这类同名冲突问题。
修改后重新运行代码,即可正常读取csv数据生成实例,print(item.all)会正确输出所有实例组成的列表。
内容的提问来源于stack exchange,提问作者user2211420
相关产品推荐
相关产品推荐

