如何修复使用csv.reader(open(..))时出现的AttributeError: __enter__错误?
解决
AttributeError: __enter__错误的方案 嘿,我一眼就看出问题所在啦!你遇到的AttributeError: __enter__是因为把csv.reader直接放在了with语句里——而csv.reader返回的是迭代器,不是支持上下文管理的对象,with语句只认实现了__enter__和__exit__方法的对象(比如文件对象)。
错误代码的问题点
你原来的代码片段里出错的行是这样的:
with csv.reader(open('analyse_' + str(bloombergcode) + '.csv', 'r'), delimiter= ",",quotechar='|') as q2:
这里csv.reader()不是上下文管理器,所以with不知道怎么处理它,直接抛出了这个错误。
修复后的代码
正确的做法是先打开文件(文件对象是合法的上下文管理器),再基于这个文件对象创建csv.reader:
# 先把文件对象放在with里,确保代码块结束后自动关闭文件 with open('analyse_' + str(bloombergcode) + '.csv', 'r') as csv_file: # 基于打开的文件创建csv.reader实例 q2 = csv.reader(csv_file, delimiter=",", quotechar='|') # 接下来就可以正常处理CSV内容了,比如遍历行 for row in q2: # 这里写你的业务逻辑,比如情感分析相关操作 print(row)
为什么这样改?
open()返回的文件对象自带上下文管理能力,with语句会在代码块执行完毕后自动帮你关闭文件,避免资源泄漏。csv.reader只需要接收一个打开的文件对象作为参数,它会负责解析文件里的CSV格式内容。
如果之后还遇到问题,可以先检查文件路径是否正确、目标CSV文件是否存在哦!
内容的提问来源于stack exchange,提问作者blueworld
相关产品推荐
相关产品推荐

