解析 python 时如何判断下一行是否应该缩进

How to tell if the next line should be indented when parsing python

我正在用 python 编写一个简单的模板引擎,它涉及将 python 与其他语言混合,我需要确定 python 任何给定行的缩进级别代码。

我想知道新的缩进级别总是由行尾的冒号 (:) 表示是否准确。

这里有一行python:

if my_boolean:

由于这一行的末尾有一个冒号,所以我确定python的下一行应该是一个缩进块。这总是准确的吗?在没有冒号的情况下是否需要缩进?

行尾的冒号是最常见的指示器示例,表示下一行缩进。另一个是左括号、大括号或方括号多于右括号的任何行。后一种情况更复杂,因为括号的顺序非常重要,也因为后面的缩进是任意的。

另一件需要考虑的事情是,在您到达某行之前,您没有任何迹象表明该行是否应该缩进。

这个故事的寓意是,您最好使用 ast 模块公开的现有机制,而不是重新发明轮子。有时这是一个非常复杂的轮子。