<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def update_by_uid(self, uid, data):
 """Update a row with the given data. Parameters uid : int The UID of the row to update. data : :obj:`dict` A dictionary mapping keys (header strings) to values. Raises ------ Exception If the value for a given header is not of the appropriate type. """

        row = self._table[uid+1]
        for key, val in data.items():
            if key == '_uid' or key == '_default':
                continue
            if key not in self._headers:
                logging.warn("Unknown column name: {0}".format(key))
                continue
            if not isinstance(val, CSVModel._KNOWN_TYPES_MAP[self._headers_types[key]]):
                raise Exception('Data type mismatch for column {0}. Expected: {1}, got: {2}'.format(key,
                                                        CSVModel._KNOWN_TYPES_MAP[self._headers_types[key]], type(val)))
            row[key] = val
        self._save()