如何将Python代码块按顶级语句拆分为字符串列表?
解决方案
你可以直接用Python内置的ast(抽象语法树)模块实现需求,不需要安装第三方依赖。核心是用ast.parse解析代码结构,再通过ast.get_source_segment提取每个顶级语句对应的原始代码片段,刚好匹配你要的拆分效果。
实现代码
import ast def split_top_level_statements(code: str) -> list[str]: # 解析代码为抽象语法树,语法错误会直接抛出SyntaxError,可自行捕获处理 tree = ast.parse(code) result = [] for node in tree.body: # 提取当前节点对应的原始代码段 segment = ast.get_source_segment(code, node) if segment: result.append(segment) return result
测试效果
输入你给出的示例代码:
while False: pass def function(): pass print("Code sample") for _ in range(1,100): for __ in range(_): pass
调用函数后的输出和你期望的结果一致:
[ "while False:\n pass", "def function():\n pass", 'print("Code sample")', "for _ in range(1,100):\n for __ in range(_):\n pass" ]
补充说明
- 该方法仅适用于Python3.8及以上版本,
ast.get_source_segment是3.8版本新增的内置方法 - 如果输入代码存在语法错误,
ast.parse会直接抛出SyntaxError,你做错误检查工具时可以直接捕获该异常获取语法类错误信息 - 如果需要调整代码段的换行、缩进格式,对提取到的segment做字符串处理即可
内容的提问来源于stack exchange,提问作者aph
相关产品推荐
相关产品推荐

