'Return a selected object
Recursively finds an object specified by a list of `(name, selector)`
items.
Raises _SelectError if the object does not exist.'

def select(self, selectors):

    if (not selectors):
        return self
    (name, selector) = selectors[0]
    next_selector = selectors[1:]
    (root, items) = self.items(name)
    if (((root is False) and (selector is None)) or ((items is None) and (selector is not None)) or ((items is not None) and selector and (selector not in items))):
        raise _SelectError(name, selector)
    obj = self._select(name, selector)
    if (obj is None):
        raise _SelectError(name, selector)
    return obj.select(next_selector)
