У нас есть простая функция AssertTrue, используемая в нашем проекте Python, и я хотел изменить вывод, который она предоставляет, чтобы распечатать оператор кода, из которого она была вызвана. Код выглядит примерно так:
1 import traceback
2
3 def AssertTrue(expr, reason=None):
4 print traceback.format_stack()[-2]
5
6 AssertTrue(1 == 2,
7 reason='One is not equal to two')
Выход:
File "/tmp/fisken.py", line 7, in <module>
reason='One is not equal to two')
Мне интересно, почему traceback.format_stack дает мне код только в строке 7. Оператор начинается в строке 6, и выражение, которое я хотел бы видеть в выводе, также находится в той же строке. Разве трассировка не обрабатывает многострочные вызовы функций?
(Неважно, что есть лучшие способы сделать AssertTrue(...). Мне просто интересно, почему traceback.format_stack (и .extract_stack) ведет себя не так, как я ожидал)