为什么python复制代码运行不了 |
您所在的位置:网站首页 › 为什么我的手机代码运行不了 › 为什么python复制代码运行不了 |
我在python3.6中编写了一个解析器;我在生成bug的同时尽可能地简化了它: def tokenize(expr): for i in expr: try: yield int(i) except ValueError: yield i def push_on_stream(obj, stream): yield obj yield from stream class OpenBracket: "just a token value, could have used Ellipsis" pass def parse_toks(tokstream): result = [] leading_brak = False for tok in tokstream: if tok == OpenBracket: leading_brak = True elif tok == '(': result.append(parse_toks( push_on_stream(OpenBracket, tokstream))) elif tok == ')': if not leading_brak: raise SyntaxError("Very bad ')'.") break else: result.append(tok) return sum(result) def test(expr="12(34)21"): tokens = tokenize(expr) print( parse_toks(tokens) ) print(list(tokens)) test() 这个例子很简单;其效果应该是添加字符串中的所有数字,包括括号中的数字。 tokenize()函数生成令牌,parse_tok()函数解析令牌流。如果它遇到一个左括号,它会重复出现(按 开括号 在token流上),它应该具有将括号中的数字视为单独表达式、对其进行解析并将结果添加到 结果 堆叠。 当我解析代码时,例如在表达式“1(2)3”上,它立即在右括号后结束,返回 三 事实上,令牌流似乎已经结束。 但是,当我使用pdb运行它,并在parse-tok的循环中设置断点时,我可以在处理')'时小心地执行,并且程序正确地返回 六 . 我认为这个bug与从push_on_stream()中的token流中让步有关。 这是解释程序中的错误吗?如果有,是否有一个好的解决方法? 我是为python-3.6编写的,但我也在另一台机器上用相同的结果在python-3.7上进行了测试。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |