python - AttributeError: __enter__ ; context manager inside function
问题描述
def get_reply(file_name, input):
import csv
#error line
with open(file_name, "r") as csv_f, csv.reader(csv_f, delimiter = ",") as csv_reader:
return search(csv_reader, input)
Error :
in get_reply
with open(file_name, "r") as csv_f, csv.reader(csv_f, delimiter = ",") as csv_reader:
AttributeError: __enter__
Why is this error occurring and how to resolve it? What does this error mean in this context?
Thanks a lot for your help, I am fairly new to programming..
I will attach the rest of the code, for context, that is meant to process replies to user input by going over a csv file [user_input,response].
The code is written this way so that it can be imported and reused.
def search(csv_reader, input) :
for line in csv_reader:
if input == line[0]:
return line[1]
def get_reply(file_name, input):
import csv
with open(file_name, "r") as csv_f, csv.reader(csv_f, delimiter = ",") as csv_reader:
return search(csv_reader, input)
#Test execution
list1 = get_reply("csv_dataset.txt", input("Enter Input : "))
解决方案
csv.reader
has not implemented the __enter__
and __exit__
methods. So you cannot use it as context manager (this is what you do with the with
).
Use it in this way:
def get_reply(file_name, input):
import csv
with open(file_name, "r") as csv_f:
csv_reader = csv.reader(csv_f, delimiter = ",")
return search(csv_reader, input)
If you want to use it as context-manager you can build own wrapper with the contextlib.
import csv
from contextlib import contextmanager
@contextmanager
def csv_reader(*args, **kwargs):
yield csv.reader(*args, **kwargs)
with open(file_name, "r") as csv_f, csv_reader(csv_f, delimiter = ",") as reader:
return search(reader, input)
推荐阅读
- javascript - 通过键值过滤对象以获取所有受影响对象的键
- c - 在 macOS 和 Windows 上将 const char* 从 C 转换为 UTF16?
- javascript - 使用jQuery对div元素进行排序?
- jsf - 在 JSF 中,是否可以调用支持 bean 上的任何方法来确定是否渲染组件?
- c - 我如何询问linux是否有更多内存?
- ocr - 训练 Tesseract:如何处理训练图像中的多个空白字符
- php - 元和属性的 Woocommerce 查询问题
- java - 将 Java 代码作为 Java 应用程序而不是 Applet 运行
- python - ModuleNotFoundError:没有名为“RNA”的模块
- quarkus - 如何在另一个线程上运行阻塞代码并使http请求立即返回