Tôi muốn xác định chức năng nhật ký được gọi bằng một tin nhắn theo sau bởi một hoặc nhiều biến được in ra. Vì vậy, giống như sau:Làm cách nào để in các đối số biến với tên từ ngăn xếp trước?
log("Oh no, error.", x, d)
log sẽ được xác định sorta thích:
def log(msg, *arg):
# Loop through arg, printing caller's variable's name and value.
này sẽ đăng nhập vào một tập tin như sau:
Oh no, error.
x = 5
d = { foo: "Foo", goo: "Goo" }
này có thể được thực hiện tại tất cả ? Tôi có thể in người dân địa phương và các đối số bằng cách sử dụng kiểm tra, nhưng tôi không biết nếu tôi có thể lặp qua các giá trị trong khung hiện tại, sử dụng tên biến của một khung trước đó. (locals
trong inspect.getargvalues(previousFrame)
có tên, nhưng rất nhiều tên khác nữa.)
Làm thế nào để bạn xác định duy nhất tên biến? Điều gì sẽ xảy ra nếu người gọi có 'y' trong không gian tên và giá trị của nó cũng xảy ra là' 5'? Điều gì sẽ xảy ra nếu người gọi chuyển một cái gì đó như 'd ['foo']'? Bạn có cần phải recurse sâu vào các đối tượng trong không gian tên của người gọi không? Điều gì xảy ra nếu chúng vượt qua kết quả của một cuộc gọi hàm? 'log ('message', x.bar())'? Có rất nhiều trường hợp khá khó giải quyết ở đây ... mặc dù bạn có thể kiểm tra ngăn xếp và in ra _all_ các biến cục bộ của người gọi. – mgilson
* thở dài * Vâng, tôi đoán bạn đúng mgilson. Vậy tôi nên làm gì đây? Tôi có phải xóa bài đăng này không? Hoặc có lẽ đó là suy nghĩ mơ hồ của tôi, tôi chỉ muốn có một chức năng đăng nhập ghi nhật ký các biến mà tôi đưa ra. Điều này không thể được thực hiện ở tất cả? Vì vậy, nếu họ vượt qua nó 5, nó in 5 = 5. nếu họ vượt qua nó y, nó in y = 5. Nếu họ vượt qua nó một đối tượng, nó in object = str (đối tượng). – Bitdiot
@Bitdiot, tại sao? Nó không được viết xấu hoặc được tổ chức kém. Và đối với cá nhân tôi câu hỏi là thú vị – ForceBru