Python 检查给定内存地址处的对象

Python 检查给定内存地址处的对象,python,python-2.7,sqlalchemy,Python,Python 2.7,Sqlalchemy,给定python解释器抛出的典型错误消息: TypeError: <sqlalchemy.orm.dynamic.AppenderBaseQuery object at 0x3506490> is not JSON serializable TypeError:不可序列化JSON 我可以使用该内存地址使用python shell查找有问题的对象吗?不,不能。该地址的唯一用途是识别对象以进行调试。如果您真的、真的想,这不是不可能的。只是很难,而且是个很坏的主意 在CPython中,

给定python解释器抛出的典型错误消息:

TypeError: <sqlalchemy.orm.dynamic.AppenderBaseQuery object at 0x3506490> is not JSON serializable
TypeError:不可序列化JSON

我可以使用该内存地址使用python shell查找有问题的对象吗?

不,不能。该地址的唯一用途是识别对象以进行调试。

如果您真的、真的想,这不是不可能的。只是很难,而且是个很坏的主意

在CPython中,可以使用
ctypes
将数字转换为指向所需类型的指针。并像任何其他库一样,从
sys.executable
(和/或实际代码所在的so/dll/framework)加载和调用函数。并定义与C API结构匹配的结构

如果你真的很小心,你会很快犯错误,而不是把一切都搞得一团糟。如果你真的,真的很小心,你可以偶尔做一些令人讨厌的黑客,甚至不做任何改动


然而,在这种情况下,它不太可能对你有任何好处。当然,在某个时刻,0x3506490上有一个
sqlalchemy.orm.dynamic.appenderSequery
对象……但一旦该对象超出范围,它可能就被释放了,所以该位置可能有任何东西……

废话。如果我不能在shell中使用该地址获取对象的引用(为了调试的目的),它有什么用?@nothankyu它是默认的,没有为它定义有意义的repr/str。。。你应该有更多的回溯,这将给你更多的线索,它发生在哪里。。。在您的代码周围放置一个
try/except
,并对其进行分析way@nothankyou许多错误消息(如您给出的消息)将适用于类的所有实例。否则使用
导入pdb;pdb.pm()
进入调试器并检查程序的状态。