无法从字典中引用使用“ vars()[]”创建的变量

时间:2019-03-27 22:53:40

标签: 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])

程序的要求之一是确保用户可以立即查看所有漫画的库存。为此,我只需使用vars()函数为字典中的每个键创建两个标签小部件(除了一些格式以确保漫画名称中的空格不会引起冲突);

itteration = 2

for item in comic_books:

    vars()[item.replace(" ", "") + "Stock"] = Label(main, text=item+":")
    vars()[item.replace(" ", "") + "Stock"].grid(column=1, row=itteration, padx=5)

    vars()[item.replace(" ", "") + "StockAmount"] = Label(main, text=comic_books[item])
    vars()[item.replace(" ", "") + "StockAmount"].grid(column=2, row=itteration, padx=5)
    itteration += 1

我最终得到了低于预期的结果,该结果按预期工作:

image

基本上,我的问题是我想稍后在代码中引用这些变量之一(特别是,这是用户出售漫画时运行的代码的一部分,以便使用新的标签更新标签值);

for item in comic_books:
                vars()[item.replace(" ", "") + "StockAmount"].config(text=comic_books[item])

这不起作用,每当程序尝试运行上面的行时,我都会收到此错误:

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

谢谢!

1 个答案:

答案 0 :(得分:1)

  

这时我不知所措。

要做的第一件事是停止使用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)
    ...