Python 2 to 3, error converting a list(zip(*aList)[1])

68 Views Asked by At

I have a small chunk of code which not being a python guru I am not sure what it is really 'doing', but it fails under python3:

 if indSoundsToPlay:
            indSoundsToPlay = list(indSoundsToPlay)
            indSoundsToPlay.sort()
            soundsToPlay = list(zip(*indSoundsToPlay)[1]) <-- fails
            soundsToPlay.reverse() # since played from back to front
            self.playSounds(soundsToPlay)

This worked fine in Python2, but upon converting it did not like the list zip line at all. So I converted that line to:

            soundsToPlay = list(zip(*indSoundsToPlay))            

It was okay with that, I am not sure what the list zip * is really doing in python. Though the error subsided but now I realized that I painted myself into either a) another error or b) a new error just near the same code. The slice of code that now breaks is :

What error I get now is on the function call to playSounds:

def playSounds(self, sounds):
    """Play one or more of a set of sounds; played in order from last to first.
    """
    if not sounds:
        return
    soundFunc = sounds.pop(-1)
    soundFunc()
    if sounds:
        self._soundTimer.start(_SoundInterval, self.playSounds, sounds)


KeyVar('tcc', 'AxisCmdState') <bound method AxisStatusWdg.setAxisCmdState of <TUI.TCC.StatusWdg.AxisStatus.AxisStatusWdg object .!toplevel46.!statuswdg.!axisstatuswdg>>(*(['Drifting', 'Drifting', 'Drifting'],), **{'isCurrent': True, 'keyVar': KeyVar('tcc', 'AxisCmdState', 3, str)}) failed: 'tuple' object is not callable
Traceback (most recent call last):
  File "/Users/st/TUI3/RO/AddCallback.py", line 77, in safeCall2
    return func(*args, **kwargs)
  File "/Users/st/TUI3/TUI/TCC/StatusWdg/AxisStatus.py", line 300, in setAxisCmdState
    self.playSounds(soundsToPlay)
  File "/Users/st/TUI3/TUI/TCC/StatusWdg/AxisStatus.py", line 359, in playSounds
    soundFunc()
TypeError: 'tuple' object is not callable

KeyVar('tcc', 'AxisCmdState') <bound method AxisStatusWdg.setAxisCmdState of <TUI.TCC.StatusWdg.AxisStatus.AxisStatusWdg object .!toplevel46.!statuswdg.!axisstatuswdg>>(*(['Tracking', 'Tracking', 'Tracking'],), **{'isCurrent': True, 'keyVar': KeyVar('tcc', 'AxisCmdState', 3, str)}) failed: 'tuple' object is not callable
Traceback (most recent call last):
  File "/Users/st/TUI3/RO/AddCallback.py", line 77, in safeCall2
    return func(*args, **kwargs)
  File "/Users/st/TUI3/TUI/TCC/StatusWdg/AxisStatus.py", line 300, in setAxisCmdState
    self.playSounds(soundsToPlay)
  File "/Users/st/TUI3/TUI/TCC/StatusWdg/AxisStatus.py", line 359, in playSounds
    soundFunc()
TypeError: 'tuple' object is not callable

I don't know if it's what I did to indSoundsToPlay with the changing of that list(zip command or if it is a separate error in general. So not really sure where to start with this one besides learning what list(zip(* means in python.

0

There are 0 best solutions below