Можно ли получить исходный код текущего (многострочного) оператора, используя фрейм стека?

#python #python-internals #stack-frame

Вопрос:

Я заинтересован в том, чтобы иметь возможность использовать подобный код для получения 3 или (3, 7) (строки, содержащие текущий оператор), однако, f_lineno возвращает 6 , потому что именно там происходит фактическое выполнение.

Я надеялся найти границы текущего оператора таким образом, чтобы это работало в целом для многострочных операторов (не только для этого примера lol).

 import sys  print( # line 3    sys._getframe().f_lineno # line 6 )  

(то же самое относится и к inspect.currentframe , потому что это одно и то же)

Я глубоко изучил модуль inspect и объекты фрейма стека, и моя текущая оценка заключается в том, что эта информация физически недоступна в Python, но это было удивительно для меня, и мне было интересно, знал ли кто-нибудь какой-то дерзкий способ обойти это или причину, по которой это так. (У меня есть способ обойти мою проблему с помощью регулярных выражений и балансировки скобок, но, очевидно, это немного хрупко и не идеально!)

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