如何找出对象的实例化位置?

Bre*_*els 9 python inspect

我试图在运行时找出实例化对象的位置,因为这样可以为我的库用户提供非常有用的错误消息.

假设我们有以下代码:

import mylib

obj = mylib.MyClass()
Run Code Online (Sandbox Code Playgroud)

obj然后传递给另一个类的实例mylib,并继续进行一次精彩的旅程.沿着这条线的某个地方,obj会导致不好的事情发生,我想将用户指向obj实例化的地方.

我希望我可以使用inspect模块找出哪个文件以及obj实例化的行号.不幸的是,inspect.getsourcefile并且inspect.getsourcelines不支持实例.是否存在技术原因导致不支持此操作?

有没有其他方法可以获得我正在寻找的数据?

NPE*_*NPE 9

您可以在类的构造函数中记录此信息:

import traceback

class MyClass(object):
   def __init__(self):
       self.traceback = traceback.extract_stack()[-2]

obj = MyClass()

print 'Instantiated in {0}:{1}'.format(*obj.traceback)
Run Code Online (Sandbox Code Playgroud)