Home AMX User Forum Scripting Languages

MUSE firmware 1.1.43 PythonThing does not support len() and iteration causes an infinite loop

clangerakclangerak Posts: 11
edited August 26 in Scripting Languages

While the descriptor for a device (idevice in this case) shows items as an array, it is not currently possible to get the length of the array nor to iterate through the items.

For example, the following code throws an exception:

device = mojo.context.devices.get("idevice")
print(f"controller has {len(device.serial)} serial ports")

TypeError: object of type 'PythonThing' has no len()

The following code causes an infinite loop:

device = mojo.context.devices.get("idevice")
for index, com_port in enumerate(device.serial):
    print(f"set listen event for serial port {index}")
    com_port.receive.listen(_event_callback) 

I have submitted a support case to Harman.

Comments

  • Official Harman response is PythonThing class has __getitem__ defined, so it supports lookup by key, but it does not have __len__, __iter__ and __next__ defined to support len() or iteration.

    I've put in a feature request.

    Meanwhile, it does have a size attribute, so in the example above device.serial.size will report the number of ports.

Sign In or Register to comment.