我想定義一個日誌函數,用一條消息跟一個或多個變量打印出來。因此,類似如下:如何用前一個堆棧的名稱打印變量參數?
log("Oh no, error.", x, d)
日誌將被八九不離十定義如下:
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())'?有很多情況很難在這裏解決......儘管你可能會檢查堆棧並打印調用者的局部變量。 – mgilson
*嘆*是的,我想你是正確的mgilson。所以我該怎麼做?我必須刪除這篇文章嗎?或者,也許這是我的一廂情願,我只想要一個記錄我給它的變量的日誌函數。這根本無法完成?所以,如果他們傳遞它5,它會打印5 = 5。如果他們傳遞了y,它會打印y = 5。如果他們傳遞一個對象,它會打印object = str(object)。 – Bitdiot
@Bitdiot,爲什麼?這不是寫得不好或組織糟糕。對我個人而言,這個問題很有趣 – ForceBru