如何解决在 ast.ImportFrom 中找到 end_lineno
在 python 3.8 中执行 ast.parse 时,你会得到一个 end_lineno 变量:
import ast
code_example = 'from typing import List,Dict'
parsed_tree = ast.parse(code_example)
for item in parsed_tree.body:
print(item.__dict__)
结果:
{
'module': 'typing','names': [<ast.alias object at 0x7fac49c1d2b0>,<ast.alias object at 0x7fac49c1d5e0>],'level': 0,'lineno': 1,'col_offset': 0,'end_lineno': 1,'end_col_offset': 29
}
在python3.7中没有end_lineno(和end_col_offset)变量,你如何手动获取?
解决方法
在python3.7中没有end_lineno(和end_col_offset)变量,你如何手动获取?
在旧版本中没有检索它们的标准方法,因为这与解析器高度耦合(实际上不是解析器,但对于 3.8/3.9,它是在 ast.c
(CST -> AST 转换)中完成的代码)。你可以做的是使用类似 lib2to3
或使用 tokenize
(标记从导入语句的开始到下一条语句的开始的源,并找到非空白非-评论最后一个令牌)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。