Как провести различие между «строкой» и «реальным кодом» в python?

Мои работы относятся к инструментированию фрагментов кода в коде Python. Поэтому в своей работе я писал бы скрипт на python, чтобы в качестве входных данных я использовал другой файл python и вставил любой необходимый код в нужное место с моим скриптом.

Следующий код является примером кода файла, который я бы использовал:

A.py #normal un-instrumented code

statements
....
....

def move(self,a):
    statements
    ......
    print "My function is defined" 
    ......

statements 
......

Мой сценарий на самом деле проверяет каждую строку в A.py, и если есть «def», то фрагмент кода инструментируется поверх кода функцией def.

В следующем примере показано, каким должен быть окончательный результат:

A.py #instrumented code

statements
....
....

@decorator    #<------ inserted code
def move(self,a):
    statements
    ......
    print "My function is defined" 
    ......

statements 
......

Но я привел с другим выводом. Следующий код является окончательным выводом, который я получаю:

A.py #инструментированный код

statements
....
....

@decorator    #<------ inserted code
def move(self,a):
    statements
    ......
    @decorator #<------ inserted code [this should not occur]
    print "My function is defined" 
    ......

statements 
......

Я могу понять, что в инструментированном коде он распознает слово «def» в слове «определено», и поэтому он обрабатывает код над ним.

На самом деле инструментированный код имеет множество этих проблем, которые я не смог правильно обработать данным файлом python. Есть ли другой способ отличить фактическое «def» от строки?

Спасибо

Ответы на вопрос(2)

Ваш ответ на вопрос