Python AttributeError:\uuuu输入\uuuu;上下文管理器内部函数
错误:Python AttributeError:\uuuu输入\uuuu;上下文管理器内部函数,python,function,file-handling,attributeerror,contextmanager,Python,Function,File Handling,Attributeerror,Contextmanager,错误: 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) 为什么会发生此错误以及如何解决?在这种情况下,这个错误
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)
为什么会发生此错误以及如何解决?在这种情况下,这个错误意味着什么?
非常感谢你的帮助,我对编程相当陌生
我将附加代码的其余部分作为上下文,这意味着通过查看csv文件[user_input,response]来处理对用户输入的回复
代码以这种方式编写,以便导入和重用
csv.reader
未实现\uuuuuuuuuuuuuuuuu
和\uuuuuuuuuuuu退出
方法。所以您不能将其用作上下文管理器(这是您使用和
所做的)
以这种方式使用它:
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\u reader不是一个上下文管理器,请在with语句中使用它也请参见。感谢您澄清我的疑问。没有理由将其设为上下文管理器:
csv。reader
只使用打开的文件对象,不负责确保其关闭。在发生except时,它也不会执行任何需要清理的操作(正如您的定义所表明的:在生成csv.reader
实例之前或之后,您不会执行任何操作)。
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 : "))
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)
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)