Vorrei definire una funzione di registro chiamata con un messaggio seguito da una o più variabili da stampare. Quindi, qualcosa di simile al seguente:Come stampare gli argomenti variabili con i nomi dello stack precedente?
log("Oh no, error.", x, d)
registro sarebbe definito sorta come:
def log(msg, *arg):
# Loop through arg, printing caller's variable's name and value.
Questo sarebbe accedere a un file seguente:
Oh no, error.
x = 5
d = { foo: "Foo", goo: "Goo" }
si può fare a tutti ? Posso stampare locals e argomenti usando inspect, ma non so se posso scorrere i valori nel frame corrente, usando i nomi delle variabili di un frame precedente. (locals
in inspect.getargvalues(previousFrame)
ha i nomi, ma un sacco di altri nomi troppo.)
Come si determinano in modo univoco i nomi delle variabili? Cosa accadrebbe se il chiamante avesse 'y' nel namespace e il suo valore fosse anche' 5'? Cosa succede se il chiamante passa qualcosa come 'd ['foo']'? Hai bisogno di ricorrere arbitrariamente in profondità negli oggetti nel namespace del chiamante? Cosa succede se passano il risultato di una chiamata di funzione? 'log ('message', x.bar())'? Ci sono molti casi che sono difficili da risolvere qui ... anche se probabilmente potresti ispezionare lo stack e stampare tutte le variabili locali del chiamante. – mgilson
* sigh * Sì, penso che tu abbia ragione mgilson. Quindi cosa dovrei fare? Devo cancellare questo post? O forse è il mio pio desiderio, voglio solo una funzione di registro che registri le variabili che gli ho dato. Questo non può essere fatto affatto? Quindi, se lo passano 5, stampa 5 = 5. se lo passano y, stampa y = 5. Se passano un oggetto, stampa object = str (oggetto). – Bitdiot
@Bitdiot, perché? Non è scritto male o organizzato male. E per me personalmente la domanda è interessante – ForceBru