【问题标题】:How to get the return value of __setitem__ call on python dict [duplicate]如何在python dict上获取__setitem__调用的返回值[重复]
【发布时间】:2013-08-09 07:47:34
【问题描述】:

我只是将 dict 的 setitem 方法的默认行为扩展为如下所示

class SafeSwapDict(dict):
    def __setitem__(self, key, value):
        if isinstance(key, collections.Hashable):
            super(SafeSwapDict, self).__setitem__(key, value)
        else return False
    return True

当我调用该方法时,我想获得那些返回值,但我似乎找不到转机,因为

a = SafeSwapDict()
print a['1'] =  132

不起作用(它希望 ===

还有

a = SafeSwapDict()
w = a['1'] = 132
print w 

会输出132(它会先执行右边的语句(a['1'] = 132)然后把值复制到w中,而不是方法的返回值)

以下方法可行,但并不是真正有用(如果不能按预期使用运算符,为什么要重载它?)

print dict_out.__setitem__(1, 132)

还有其他建议吗? 附言我不允许使用异常处理:)

【问题讨论】:

  • 所以我无法测试我的方法调用是否成功? (我仍然可以通过添加另一个属性'success_assign' 来获得我想要的东西,当进入函数时将设置为 True,如果没有成功则设置为 False)
  • @NiCU 如果没有成功,它应该抛出一个你可以处理的异常。
  • @glglgl 我知道,但我被限制不使用异常。
  • @NiCU 好的。这很奇怪。

标签: python python-2.7


【解决方案1】:

在您的具体示例中,dict 仅在您的密钥不可散列时才返回 False。在任何其他情况下,分配都有效。

就像你分配some_var = 2一样,你不需要测试some_var是否真的是2,因为它确实是。

dict 的情况下,无效的密钥(例如list)将失败并通知您:

>>> some_dict = {}
>>> some_dict[[0]] = 42   #the key is a list [0], unhashable
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'

总之,你不需要测试你的分配是否成功,因为它永远不会默默地失败。

【讨论】:

  • 我知道如果密钥不可散列,它应该引发异常,但我被限制不对此任务使用异常处理:|
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-17
  • 1970-01-01
  • 2015-01-06
  • 1970-01-01
相关资源
最近更新 更多