微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 ast.ImportFrom 中找到 end_lineno

如何解决在 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 举报,一经查实,本站将立刻删除。