#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, но это было удивительно для меня, и мне было интересно, знал ли кто-нибудь какой-то дерзкий способ обойти это или причину, по которой это так. (У меня есть способ обойти мою проблему с помощью регулярных выражений и балансировки скобок, но, очевидно, это немного хрупко и не идеально!)
Примечание: это для забавы, экспериментальная вещь, поэтому я надеюсь, что никто не использует это как историю своего злодейского происхождения.