使用locals()的Python字典推导式导致KeyError

4 投票
2 回答
2318 浏览
提问于 2025-04-17 22:50
>>> a = 1
>>> print { key: locals()[key] for key in ["a"] }
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 1, in <dictcomp>
KeyError: 'a'

我该如何用一种简洁的方式创建一个字典呢?

最终结果应该是 {"a": 1}

2 个回答

2

你可以试试用 globals() 来代替:

print {key : globals()[key] for key in ["a"]}

因为 a 在字典推导式的范围内没有定义(正如 @MartijnPieters 所说的)。

12

字典推导式有自己的命名空间,也就是说在这个命名空间里,locals() 里是找不到 a 这个变量的。简单来说,除了最外层的可迭代对象(这里是 ["a"])以外,其他的代码几乎都是在一个嵌套函数里运行的,最外层的可迭代对象会作为参数传进去。

如果你用 globals() 来替代,或者在字典推导式 外部 创建一个对 locals() 字典的引用,你的代码就能正常工作了:

l = locals()
print { key: l[key] for key in ["a"] }

示例:

>>> a = 1
>>> l = locals()
>>> { key: l[key] for key in ["a"] }
{'a': 1}
>>> { key: globals()[key] for key in ["a"] }
{'a': 1}

撰写回答