Я думаю, что я знаю об обычных причинах IndentationError
, как описано в IndentationError: unindent не соответствует ни одному внешнему уровню отступа , например. Это не применимо здесь.
Кроме того, я знаю о textwrap.dedent
, но мне не кажется, что это правильный подход?
Если у меня есть «обычная» функция, я могу сделать ast.parse
и ast.walk
следующим образом:
import ast
import inspect
def a():
pass
code = inspect.getsource(a)
nodes = ast.walk(ast.parse(code))
for node in nodes:
...
Однако, если функция является методом внутри класса, например:
class B:
def c(self):
pass
code = inspect.getsource(B.c)
nodes = ast.walk(ast.parse(code))
Я получаю:
IndentationError: unexpected indent
Думаю, это имеет смысл, поскольку B.c
имеет с отступом на один уровень. Так как же мне ast.parse
и ast.walk
здесь вместо этого?