def _next_iter_line(self, row_num):
try:<EOL><INDENT>return next(self.data)<EOL><DEDENT>except csv.Error as e:<EOL><INDENT>if self.warn_bad_lines or self.error_bad_lines:<EOL><INDENT>msg = str(e)<EOL>if '<STR_LIT>' in msg:<EOL><INDENT>msg = ('<STR_LIT>'<EOL>'<STR_LIT>'<EOL>'<STR_LIT>'<EOL>'<STR_LIT>')<EOL><DEDENT>if self.skipfooter > <NUM_LIT:0>:<EOL><INDENT>reason = ('<STR_LIT>'<EOL>'<STR_LIT>'<EOL>'<STR_LIT>'<EOL>'<STR_LIT>'<EOL>'<STR_LIT>')<EOL>msg += '<STR_LIT>' + reason<EOL><DEDENT>self._alert_malformed(msg, row_num)<EOL><DEDENT>return None<EOL><DEDENT>
Wrapper around iterating through `self.data` (CSV source).

When a CSV error is raised, we check for specific
error messages that allow us to customize the
error message displayed to the user.

Parameters
----------
row_num : The row number of the line being parsed.