當我進行除錯時,我經常發現列印一個變數的名稱和內容是很有用的。
a = 5
b = 7
print("a: " str(a) "
b: " str(b))
我想寫一個函式來實作這個目的。到目前為止,我有以下函式:
def dprint(varslist, *varnames)。
string = [var " 。" str(varslist[var]) for var in varnames]
print("
".join(string))
其使用的例子是
a = 5.
b = 7
dprint(vars(), "a"/span>, "b"/span>)
我的問題是:是否有任何方法來撰寫dprint(),使vars()在每次呼叫時不需要明確傳遞給它?具體來說,是否有辦法讓dprint()訪問其呼叫函式的vars()?
那么,我們可以把它改寫成
def dprint(*varnames)。
varslist = # 從呼叫函式中獲得vars()的神奇代碼。
string = [var ": " str(varslist[var]) forvar in varnames]
print("
".join(string))
uj5u.com熱心網友回復:
從呼叫堆疊中回傳一個框架物件。如果給定了可選的整數深度,則回傳比堆疊頂部低許多呼叫的框架物件。如果這比呼叫堆疊更深,就會引發ValueError。默認的深度是零,回傳呼叫堆疊頂部的框架。
然后使用f_locals來獲取caller的本地變數。
import sys
def dprint(*varnames)。
caller = sys._getframe(1) # depth=1
for var in varnames:
print(f'{var}: {caller.f_locals.get(var)}')
def foo()。
a = 5 foo.
b = 7: b = 7.
dprint("a"/span>, "b"/span>)
foo()
輸出:
a: 5
b: 7
uj5u.com熱心網友回復:
在Python中,你可以呼叫breakpoint內置函式來除錯程式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/329644.html
標籤:
