You can do this kind of logic more cleanly with
```
cols[name].append(row.get(name, None))
```

However in this case there is not yet support for doing anything with the `None` value that gets put in the list.  This will break something downstream in a way that will be harder for users to figure out.  So I would suggest that after the `except KeyError:` you should raise an exception like:
```
raise ValueError('Row {0} is missing a value for column {1!r}'.format(i_row, name))
```
You would also need to do `for i_row, row in enumerate(data):` in the loop above.