是否有一种简单的或多或少的标准方法可以将所有变量转储到文件中,比如堆栈跟踪,但是带有变量名称和值?在locals(),globals()和dir()中的那些。 我找不到一个简单的方法,这是我的“locals()”的代码,它不起作用,因为键可以是不同的类型:
vars1 = list(filter(lambda x: len(x) > 2 and locals()[x][:2] != "__", locals()))
如果没有过滤,在尝试转储变量时我会收到错误:
f.write(json.dumps(locals()))
# =>
TypeError: <filter object at 0x7f9bfd02b710> is not JSON serializable
我认为必须有更好的手动操作。
答案 0 :(得分:1)
首先,在你的非工作示例中,你没有完全过滤掉密钥(即使技术上不需要,通常也只应该是字符串); locals()[x]
是值。
但即使您以某种方式过滤了密钥,通常也不会知道所有剩余的值都是JSON可序列化的。因此,您需要过滤值以仅保留可以映射到JSON的类型,或者您需要default
序列化器实现,它将一些合理的序列化应用于任何值。最简单的方法是使用内置的字符串表示作为后备:
json.dumps(locals(), default=repr)
顺便说一句,还有一种更直接有效的方法将JSON转储到文件中(注意dump
和dumps
之间的区别):
json.dump(locals(), f, default=repr)