def get_channel_for_utt(flist, ch, utt):
    """ Returns a specific channel for one utterance.

    Raises a KeyError if the channel does not exist

    :param flist: A dict representing a file list, i.e. the keys are the utt ids
    :param ch: The channel to fetch (i.e. X/CH1). Separator must be `/`
    :param utt: The utterance to fetch
    :return: Path to the file
    """
    val = flist[utt]
    for branch in ch.split('/'):
        if branch in val:
            val = val[branch]
        else:
            raise KeyError('No channel {} for {}'.format(ch, utt))
    return val