Я хотел бы определить функцию журнала, которая вызывается с сообщением, за которым следует одна или несколько переменных для печати. Итак, что-то вроде следующего:
log( "Oh no, error.", x, d)
log будет определен примерно так:
def log( msg, *arg):
# Loop through arg, printing caller's variable's name and value.
Это запишет в файл следующее:
Oh no, error.
x = 5
d = { foo: "Foo", goo: "Goo" }
Это вообще можно сделать? Я могу печатать локальные переменные и аргументы, используя inspect, но я не знаю, могу ли я перебирать значения в текущем кадре, используя имена переменных предыдущего кадра. (locals
в inspect.getargvalues(previousFrame)
есть имена, но есть и много других имен.)
y
, а его значение также оказалось5
? Что, если вызывающая сторона передает что-то вродеd['foo']
? Вам нужно произвольно глубоко рекурсивно обращаться к объектам в пространстве имен вызывающей стороны? Что, если они передают результат вызова функции?log('message', x.bar())
? Есть много случаев, которые довольно трудно разрешить здесь... хотя вы, вероятно, могли бы проверить стек и распечатать все локальные переменные вызывающей стороны. - person mgilson   schedule 15.09.2015