Jak odróżnić „ciąg” od „rzeczywistego kodu” w pythonie?

Moje prace dotyczą oprzyrządowania fragmentów kodu w kodzie Pythona. Tak więc w mojej pracy pisałbym skrypt w Pythonie tak, że biorę inny plik Pythona jako dane wejściowe i wstawiam w skrypcie dowolny niezbędny kod w wymagane miejsce.

Poniższy kod to przykładowy kod pliku, który byłbym instrumentowany:

A.py #normal un-instrumented code

statements
....
....

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

statements 
......

Moim skryptem, który faktycznie robi, jest sprawdzenie każdego wiersza w A.py i jeśli istnieje „def”, to fragment kodu jest oprzyrządowany w górnej części kodu funkcji def

Poniższy przykład pokazuje, jak powinien wyglądać finał:

A.py #instrumented code

statements
....
....

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

statements 
......

Ale otrzymałem inny wynik. Poniższy kod jest ostatecznym wynikiem, który otrzymuję:

A.py #instrumented code

statements
....
....

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

statements 
......

Rozumiem, że w oprzyrządowanym kodzie rozpoznaje „def” w słowie „zdefiniowany” i dlatego koduje kod nad nim.

W rzeczywistości ten instrumentowany kod ma wiele takich problemów. Nie byłem w stanie poprawnie ustawić danego pliku Pythona. Czy jest jakiś inny sposób na odróżnienie rzeczywistej „def” od łańcucha?

Dziękuję Ci

questionAnswers(2)

yourAnswerToTheQuestion