diff --git a/artiq/coredevice/comm_kernel.py b/artiq/coredevice/comm_kernel.py index df080d2d1..f566c5ff8 100644 --- a/artiq/coredevice/comm_kernel.py +++ b/artiq/coredevice/comm_kernel.py @@ -476,11 +476,19 @@ class CommKernel: if tag_element == "b": self._write(bytes(value)) elif tag_element == "i": - self._write(struct.pack(self.endian + "%sl" % - len(value), *value)) + try: + self._write(struct.pack(self.endian + "%sl" % len(value), *value)) + except struct.error: + raise RPCReturnValueError( + "type mismatch: cannot serialize {value} as {type}".format( + value=repr(value), type="32-bit integer list")) elif tag_element == "I": - self._write(struct.pack(self.endian + "%sq" % - len(value), *value)) + try: + self._write(struct.pack(self.endian + "%sq" % len(value), *value)) + except struct.error: + raise RPCReturnValueError( + "type mismatch: cannot serialize {value} as {type}".format( + value=repr(value), type="64-bit integer list")) elif tag_element == "f": self._write(struct.pack(self.endian + "%sd" % len(value), *value))