def readline(): while True: line = f.readline() if line.endswith('\n'): yield line else: yield line+'\n' yield '' break tokens, tokens_copy = itertools.tee(generate_tokens(readline().__next__)) try: st = driver.parse_tokens(tokens) print(st) except TokenError as err: print([t for t in tokens_copy]) except IndentationError as err: print(err.msg) print(err.filename) print(err.lineno) print(err.offset) print(err.text) except ParseError as err: print(err.msg) print(err.type)