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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法引用字典中使用“vars()[]”创建的变量相关的知识,希望对你有一定的参考价值。

我的任务是创建一个漫画书店的库存管理系统作为学校蟒蛇评估。我目前有一个字典,其中包含从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

我最终得到了以下结果,它按预期工作:

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

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

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

  File "C:UsersXXXDesktoppythonAsessment2	est.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)
    ...

以上是关于无法引用字典中使用“vars()[]”创建的变量的主要内容,如果未能解决你的问题,请参考以下文章

Python:使用 vars() 将字符串分配给变量

如何解析 Ansible group_vars 字典中的变量?

Ansible_变量定义与引用

ESLint 抱怨从未使用过局部状态变量 no-unused-vars

无法使用 process.env 变量连接到数据库,但 process.env vars 在日志中打印

简单理解python的垃圾回收机制