hdl.rec: use a helpful error on unknown field reference.

This commit is contained in:
whitequark 2019-01-01 03:35:34 +00:00
parent d78e6c155b
commit 031a9e2616
2 changed files with 15 additions and 2 deletions

View file

@ -87,10 +87,14 @@ class Record(Value):
self.fields[field_name] = Signal(field_shape, name=concat(name, field_name))
def __getattr__(self, name):
return self.fields[name]
return self[name]
def __getitem__(self, name):
return self.fields[name]
try:
return self.fields[name]
except KeyError:
raise NameError("Record does not have a field '{}'. Did you mean one of: {}?"
.format(name, ", ".join(self.fields))) from None
def shape(self):
return sum(len(f) for f in self.fields.values()), False

View file

@ -78,3 +78,12 @@ class RecordTestCase(FHDLTestCase):
self.assertEqual(repr(r), "(rec <unnamed> stb)")
self.assertEqual(r.stb.name, "stb")
def test_wrong_field(self):
r = Record([
("stb", 1),
("ack", 1),
])
with self.assertRaises(NameError,
msg="Record does not have a field 'en'. Did you mean one of: stb, ack?"):
r.en