def _blame_line(self, traceback):
key = None<EOL>blamed_entry = None<EOL>email_recipients = []<EOL>for stack_line in traceback:<EOL><INDENT>line_type = self._get_line_type(stack_line)<EOL>if line_type == api_ttypes.LineType.THIRDPARTY_WHITELIST:<EOL><INDENT>return None, None, None, True<EOL><DEDENT>elif line_type in [api_ttypes.LineType.DEFAULT, api_ttypes.LineType.KNOWN_ERROR]:<EOL><INDENT>filepath = self._get_basepath(stack_line.filename)<EOL>entry = api_ttypes.CodeIdentifier(filepath, stack_line.function_name, stack_line.text)<EOL>blamed_entry = entry<EOL>key = api_ttypes.ErrorKey(filepath, stack_line.line_number, stack_line.function_name, stack_line.text)<EOL>if filepath in self.watch_all_errors:<EOL><INDENT>email_recipients.extend(self.watch_all_errors[filepath])<EOL><DEDENT><DEDENT><DEDENT>return (key, blamed_entry, email_recipients, False)<EOL>
Figures out which line in traceback is to blame for the error.
        Returns a 3-tuple of (ErrorKey, StackTraceEntry, [email recipients])