<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def MultiOpenOrdered(self, urns, **kwargs):
 """Opens many URNs and returns handles in the same order. `MultiOpen` can return file handles in arbitrary order. This makes it more efficient and in most cases the order does not matter. However, there are cases where order is important and this function should be used instead. Args: urns: A list of URNs to open. **kwargs: Same keyword arguments as in `MultiOpen`. Returns: A list of file-like objects corresponding to the specified URNs. Raises: IOError: If one of the specified URNs does not correspond to the AFF4 object. """

    precondition.AssertIterableType(urns, rdfvalue.RDFURN)

    urn_filedescs = {}
    for filedesc in self.MultiOpen(urns, **kwargs):
      urn_filedescs[filedesc.urn] = filedesc

    filedescs = []

    for urn in urns:
      try:
        filedescs.append(urn_filedescs[urn])
      except KeyError:
        raise IOError("No associated AFF4 object for `%s`" % urn)

    return filedescs