检查给定的代码行是否完整且是否正确的Python代码

时间:2011-07-22 20:24:51

标签: python

抱歉我的英文。这个问题很复杂,我的英语很难清楚地描述一切。

好的,我有这个示例代码。这只是一个很小的代码,在真实的环境中,我运行的代码要大得多。

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方式来执行此操作。

2 个答案:

答案 0 :(得分:4)

我建议查看pylint

答案 1 :(得分:0)

  1. 获取抽象语法树。 http://docs.python.org/library/ast.html

  2. 从树中插入“previous statement”/“next statement”链接从每个节点到前一个语句节点。并从之前的陈述到当前的陈述。

    这对复合语句有用(for,while,if,try,with,def,class)超出我的范围。

    在所需的行号后,从这两个语句中断。

  3. 回去两个陈述。转储从树中当前位置开始的5个语句。