diff --git a/aiida/orm/nodes/data/dict.py b/aiida/orm/nodes/data/dict.py index 07e12de69e..a40374ac42 100644 --- a/aiida/orm/nodes/data/dict.py +++ b/aiida/orm/nodes/data/dict.py @@ -62,7 +62,10 @@ def __init__(self, **kwargs): self.set_dict(dictionary) def __getitem__(self, key): - return self.get_attribute(key) + try: + return self.get_attribute(key) + except AttributeError as exc: + raise KeyError from exc def __setitem__(self, key, value): self.set_attribute(key, value) diff --git a/tests/orm/data/test_dict.py b/tests/orm/data/test_dict.py index 87416dd3fb..5a25fab95d 100644 --- a/tests/orm/data/test_dict.py +++ b/tests/orm/data/test_dict.py @@ -50,3 +50,15 @@ def test_set_item(self): self.assertEqual(self.node['value'], 2) self.node.dict.value = 3 self.assertEqual(self.node['value'], 3) + + def test_correct_raises(self): + """Test that the methods for accessing the item raise the correct error. + + * `dictnode['inexistent']` should raise KeyError + * `dictnode.dict.inexistent` should raise AttributeError + """ + with self.assertRaises(KeyError): + _ = self.node['inexistent_key'] + + with self.assertRaises(AttributeError): + _ = self.node.dict.inexistent_key