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