抱歉我的英文。这个问题很复杂,我的英语很难清楚地描述一切。
好的,我有这个示例代码。这只是一个很小的代码,在真实的环境中,我运行的代码要大得多。
01: multi_line_string = """Abc
02: Dfg
03: Hjk"""
04: # Comment
05: do_somethingA()
06: do_somethingB()
07: do_somethingC()
08: string_with_linebrak = "Abc \
09: Dfg \
10: Hjk"
这段代码,每行作为列表元素我在我的函数中作为参数获得一个行号。结果我需要返回给定行号周围的2行列表。例如,使用此代码我得到第5行。这是do_somethingA()
行。
我的函数必须返回包含5个元素的列表 - 第5行之前的2行,第5行之后的第5行和第2行。这是:
03: Hjk"""
04: # Comment
05: do_somethingA()
06: do_somethingB()
07: do_somethingB()
正如您所看到的那样,我破坏了Python代码。不幸的是,我必须得到完整的代码。因此,我需要以某种方式检测到第3行不是Python代码的完整行,我需要检测这条断行的开始或结束位置并沿途获取所有行。所以,我需要的是:
01: multi_line_string = """Abc
02: Dfg
03: Hjk"""
04: # Comment
05: do_somethingA()
06: do_somethingB()
07: do_somethingC()
Lexing完整代码不是一个选项,我需要以最有效的CPU方式来执行此操作。
答案 0 :(得分:4)
我建议查看pylint。
答案 1 :(得分:0)
从树中插入“previous statement”/“next statement”链接从每个节点到前一个语句节点。并从之前的陈述到当前的陈述。
这对复合语句有用(for,while,if,try,with,def,class)超出我的范围。
在所需的行号后,从这两个语句中断。
回去两个陈述。转储从树中当前位置开始的5个语句。