Python 无法引用使用“创建”创建的变量;vars();从字典里

Python 无法引用使用“创建”创建的变量;vars();从字典里,python,python-3.x,dictionary,tkinter,Python,Python 3.x,Dictionary,Tkinter,我的任务是创建一个漫画书店的库存管理系统,作为学校的python评估。我现在有一本字典,里面有漫画的名字和从CSV文件导入的漫画的股票价值 comic_books = {} with open('data.csv', 'r+', newline='') as csvfile: csvreader = csv.reader(csvfile) for row in csvreader: comic_books[row[0]] = int(row[1]) 程序要

我的任务是创建一个漫画书店的库存管理系统,作为学校的python评估。我现在有一本字典,里面有漫画的名字和从CSV文件导入的漫画的股票价值

comic_books =  {}

with open('data.csv', 'r+',  newline='') as csvfile:
    csvreader = csv.reader(csvfile)
    for row in csvreader:
        comic_books[row[0]] = int(row[1])
程序要求之一是确保用户可以一次看到所有漫画的库存。为此,我只需使用
vars()
函数为字典中的每个键创建两个标签小部件(以及一些格式设置,以确保漫画名称中的空格等不会引起冲突)

我最终得到了以下结果,效果如预期:

基本上,我的问题是,我稍后在代码中引用其中一个变量(具体来说,这是用户出售漫画时运行的代码的一部分,以便用新值更新标签)

这不起作用,每当程序尝试运行上面的行时,我都会出现以下错误:

  File "C:\Users\XXX\Desktop\pythonAsessment2\test.py", line 114, in sellProcess
    vars()[item.replace(" ", "") + "Stock"].config(text=comic_books[item])
KeyError: 'Comic2Stock'
谢谢

我现在不知道该怎么办

首先要做的是停止使用
vars()
创建动态变量。这几乎从来都不是一个好主意,因为它会使代码变得不必要的复杂、难以编写和调试

如果要按名称引用单个项目,请使用字典。它看起来像这样:

labels = {}
for item in comic_books:
    key= "{} Stock".format(item)
    labels[key] = Label(main, text=item+":")
    labels[key].grid(column=1, row=itteration, padx=5)
    ...

我想你知道你的电子邮件地址用于你的其他帐户。。。如果是这样的话,你可以向so发送请求。你为什么还要在这里使用
vars
?不应使用动态创建的变量。使用容器,如
dict
注意,
vars()
要么返回全局名称空间,即
globals()
,要么返回本地名称空间(如果在函数中),即
locals()
。对
globals()。不要使用动态变量。使用口述。你已经在使用口述了,只是那些不能按你所希望的方式工作的口述。谢谢你的回复。我现在在学校,我的数字技术课即将结束,所以我会在回家后试一试。再次感谢你这么晚才给你回电话,周末有点忙。已标记为“已回答”。再次感谢您的回复(:
  File "C:\Users\XXX\Desktop\pythonAsessment2\test.py", line 114, in sellProcess
    vars()[item.replace(" ", "") + "Stock"].config(text=comic_books[item])
KeyError: 'Comic2Stock'
labels = {}
for item in comic_books:
    key= "{} Stock".format(item)
    labels[key] = Label(main, text=item+":")
    labels[key].grid(column=1, row=itteration, padx=5)
    ...