如何用一行代码给Python字典键赋值,访问时触发指定错误?
一行代码实现带错误触发键的字典
无需子类化dict,通过替换字典实例的__getitem__方法即可实现需求,一行代码搞定:
import types; d = {"foo": "bar", "baz": "rat"}; d.__getitem__ = types.MethodType(lambda self, key: self.get(key) if key != "no-no" else (_ for _ in ()).throw(ValueError("This is a no-no")), d)
效果验证
>>> d["foo"] 'bar' >>> d["baz"] 'rat' >>> d["no-no"] Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 1, in <lambda> ValueError: This is a no-no
原理说明
- 先创建包含普通键值对的字典
d - 通过
types.MethodType给d实例绑定自定义的__getitem__方法:- 访问普通键时,用
self.get(key)返回正常值 - 访问"no-no"键时,借助空生成器的
throw()方法直接抛出指定异常(生成器表达式(_ for _ in ())是一个空生成器,调用throw()会立即触发传入的异常)
- 访问普通键时,用
内容的提问来源于stack exchange,提问作者mivkov
相关产品推荐
相关产品推荐

