使用 exec 的动态代码问题——名字去哪儿了?

问题描述 投票:0回答:0

我应该从文件中读取数据到我的 Python 程序中,并将文件中的所有数据放在不同的集合中,并使用与文件对应的名称。我有一个问题,因为我不想在 for 循环中为我需要的每个集合输入集合名称。

我已经让

exec
函数根据需要工作,但生成的集合似乎只是在我的代码的函数部分消失了。我用过
dir()
,它说那些名字(
nba2019
nba2020
等)在那里但是当我尝试打印时,我得到一个
NameError
.

def main():
  files = ['2019.txt', '2020.txt', '2021.txt', '2022.txt', '2023.txt']
  sets = ['nba2019', 'nba2020', 'nba2021', 'nba2022', 'nba2023']
  
  for index, file_name in enumerate(files):
      with open(file_name, 'r') as infile:
        exec(f'{sets[index]} = {{element.rstrip() for element in infile}}')
        print(nba2019)
  
main()

但是,当我将相同的代码放在主函数之外时,它起作用了——我不知道为什么!即使仅在 main 中使用

exec
,集合名称也仅出现在 main
dir()
中,而不出现在全局中。有没有办法在不深入研究类的情况下保持这种设置?

files = ['2019.txt', '2020.txt', '2021.txt', '2022.txt', '2023.txt']
sets = ['nba2019', 'nba2020', 'nba2021', 'nba2022', 'nba2023']
  
for index, file_name in enumerate(files):
    with open(file_name, 'r') as infile:
      exec(f'{sets[index]} = {{element.rstrip() for element in infile}}')
      print(nba2019)
python file set exec nameerror
© www.soinside.com 2019 - 2024. All rights reserved.