def _do_action(self, action, path, *args, **kwargs):
        """Call **action** on each filesystem object in turn. If one raises an
        :py:class:`IOError`, save the exception and try the rest. If none
        succeed, re-raise the first exception.
        """

        first_exception = None

        for fs in self.filesystems:
            if fs.can_handle_path(path):
                try:
                    return getattr(fs, action)(path, *args, **kwargs)
                except __HOLE__ as e:
                    if first_exception is None:
                        first_exception = e

        if first_exception is None:
            raise IOError("Can't handle path: %s" % path)
        else:
            raise first_exception
dataset/ETHPy150Open Yelp/mrjob/mrjob/fs/composite.py/CompositeFilesystem._do_action