Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用块访问外部的值_Python_With Statement - Fatal编程技术网

Python 使用块访问外部的值

Python 使用块访问外部的值,python,with-statement,Python,With Statement,在下面的代码中,是否有一种方法可以使用-块访问外部的变量话语?下面的代码显然返回了错误:ValueError:对关闭的文件执行I/O操作。 from csv import DictReader utterances_dict = {} utterance_file = 'toy_utterances.csv' with open(utterance_file, 'r') as utt_f: utterances_dict = DictReader(utt_f) for line i

在下面的代码中,是否有一种方法可以使用-块访问
外部的变量
话语
?下面的代码显然返回了错误:
ValueError:对关闭的文件执行I/O操作。

from csv import DictReader

utterances_dict = {}
utterance_file = 'toy_utterances.csv'

with open(utterance_file, 'r') as utt_f:
    utterances_dict = DictReader(utt_f)

for line in utterances_dict:
    print(line)

我不是
DictReader
实现方面的专家,但是,在构建文件之后,让读者自己解析文件,就可以实现它。这意味着在您使用完基础文件之前,它可能必须保持打开状态。在这种情况下,尝试在
with
块之外使用
语句
是有问题的,因为此时基础文件将被关闭


即使当前的DictReader实现实际上在构建时解析了整个csv,但这并不意味着它们的实现将来不会改变。

DictReader
返回csv文件的视图

将结果转换为字典列表

from csv import DictReader

utterances = []
utterance_file = 'toy_utterances.csv'

with open(utterance_file, 'r') as utt_f:
    utterances = [dict(row) for row in DictReader(utt_f) ]

for line in utterances:
    print(line)

你为什么要在外面用它?只要把你的for循环放到结构中就行了?我知道在这种情况下该怎么做。但是实际的程序是多方面的:定义一个函数,在该函数中使用,然后返回你想要的,使用返回的data@Ruli-这可能奏效;我会好好玩玩的。谢谢