У меня есть скрипт на python, который я запускаю с 'exec'.
Когда сценарий вызывает функцию, я бы хотел, чтобы она знала номер строки и смещение в строке для этого вызова.
Вот пример. Если мой сценарий:
foo1(); foo2(); foo1()
foo3()
И если у меня есть код, который печатает (строка, смещение) в каждой функции, я должен получить
(0,0), (0,8), (0,16), (1,0)
В большинстве случаев это легко сделать, получив кадр стека, поскольку он содержит номер строки и имя функции. Единственная проблема - это когда в одной строке две функции с одинаковым именем. К сожалению, это частый случай для меня. Есть идеи?
Хорошо, кажется, что изменение исходного кода - самое простое решение.
Как бы вы решили такие вещи, как
if foo1(7) or foo1(6):
или
foo2(foo1(), foo1())
Для этого есть несколько не очень элегантных решений, например, автоматическое переключение предыдущего примера на:
def curpos(pos, func):
record_curpos(pos)
return func
curpos(foo2,0)(curpos(foo1,5)(), curpos(foo1,13)())
Дайте мне знать, если у вас есть более простые идеи.