def _parse_line(self, line, loc):
        if not line:
            self.last_person = (None, None)
            return ()   # Blank lines between entries
        try:
            if line[0] != "\t":
                newperson, line = line.split("\t", 1)
                self.last_person = (newperson, loc)
            line = line.strip()
            # Skip video games and TV episodes
            if '(VG)' in line or '{' in line:
                return ()
            # Another credit for the person
            assert(self.last_person[0])
            # Separate character, cast order information
            match = TITLERE.match(line)
            if not match:
                raise ValueError('Cannot extract title from %s' % (line,))
            title = match.group('title')
            match = CASTRE.match(match.group('trailing'))
            if not match:
                raise ValueError('Cannot extract casting from %s' % (line,))
            #if match.group('trailing'):
            #    print '"%s" has trailing garbage "%s"' \
            #        % (line, match.group('trailing'))
            character = match.group('character')
            #character = None
            order = match.group('order')
            notes = match.group('notes')
            if order:
                order = int(order, 10)
            return (title, self.last_person[1],
                    (self.last_person[0], character, order, notes))
        except __HOLE__:
            if line.strip('-') == '' and len(line) > 60:
                return None
            print line
            raise

    # def _make_result(self, data)
    # def _make_locator(self, data)
dataset/ETHPy150Open nandhp/python-imdb/imdb/parsers.py/_IMDbNamesParser._parse_line