加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 在dict理解中订阅locals()失败,KeyError

发布时间:2020-12-20 12:03:55 所属栏目:Python 来源:网络整理
导读:参见英文答案 Python dictionary comprehension using locals() gives KeyError????????????????????????????????????2个 我被Python locals()的奇怪行为所困惑. 基本上我想从字典理解中获取locals()字典中的一个项目,但它失败了.这是一个非常基本的事情,所
参见英文答案 > Python dictionary comprehension using locals() gives KeyError????????????????????????????????????2个
我被Python locals()的奇怪行为所困惑.
基本上我想从字典理解中获取locals()字典中的一个项目,但它失败了.这是一个非常基本的事情,所以:

>>> foo=123
>>> bar=345
>>> baz=678
>>> {k: locals()[k] for k in ('foo','bar','baz')}
Traceback (most recent call last):
  File "<stdin>",line 1,in <module>
  File "<stdin>",in <dictcomp>
KeyError: 'foo'
>>> locals()['foo']
123
>>> locale=locals()
>>> {k: locale[k] for k in ('foo','baz')}
{'foo': 123,'bar': 345,'baz': 678}
>>> type(locals())
<class 'dict'>
>>> def fun():
...     return {'foo': 123,'bar':345}
... 
>>> {k: fun()[k] for k in ('foo','bar')}
{'foo': 123,'bar': 345}

在实际的一面,在dict或字符串.format()中的丑陋{‘foo’:foo,’bar’:bar}等工作正常.
只是我错过了一些东西,所以知道为什么会增加我的编码chi(截至目前我在编码时不发光).

解决方法

因为Python 3中的所有理解都是使用隐藏函数实现的,所以调用locals不会返回您期望返回的值.

您可以通过打印值来看到这一点:

>>> _ = {k: print(locals()) for k in ('foo','baz')}
{'k': 'foo','.0': <tuple_iterator object at 0x7fdf840afa90>}
{'k': 'bar','.0': <tuple_iterator object at 0x7fdf840afa90>}
{'k': 'baz','.0': <tuple_iterator object at 0x7fdf840afa90>}

像你一样将locals()分配给语言环境可以解决这个问题.你不是在理解中调用本地人.

请注意,在Python 2中,情况有点模糊. dict-comps以类似的方式失败但是list-comps,它早于dict-comps,工作得很好:

>>> _ = [locals()[k] for k in ('foo','baz')]
>>> _
[20,40,60]

这是另一个与W3相比为addressed的“疣”.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读