为何使用2to3的fix_print.py时,节点包含编码注释?
为什么2to3转换时print节点会包含编码注释?
这是lib2to3的解析逻辑导致的:
- lib2to3在处理Python代码时,会把语句前面的所有空白、换行和注释都作为该语句节点的
prefix属性保存。 - 你的目标Python文件里,编码注释是文件最开头的内容,后面跟着空行才是
print语句。解析器会把这段前置的编码注释和空白内容,都关联到第一个实际执行的语句节点(也就是print所在的simple_stmt)上。 - 你的自定义
FixPrint类通过PATTERN匹配到了这个simple_stmt节点,当你打印该节点时,会输出节点的完整信息(包括它的prefix部分),所以就会看到那个编码注释。
你可以在transform方法里单独打印node.prefix来验证,会发现输出的就是编码注释加后续的空行内容。
内容的提问来源于stack exchange,提问作者haifu_qin
相关产品推荐
相关产品推荐

