Example:
>>> try:
... myapp.foo.doSomething()
... except Exception, e:
... print 'Thrown from:', modname(e)
Thrown from: myapp.util.url
在上面的示例中,异常实际上是在 myapp/util/url.py 模块中引发的。有没有办法获得__name__
那个模块的?
我的目的是用这个logging.getLogger
功能。
这应该有效:
import inspect
try:
some_bad_code()
except Exception, e:
frm = inspect.trace()[-1]
mod = inspect.getmodule(frm[0])
print 'Thrown from', mod.__name__
编辑:Stephan202 提到了一个极端情况。在这种情况下,我认为我们可以默认文件名。
import inspect
try:
import bad_module
except Exception, e:
frm = inspect.trace()[-1]
mod = inspect.getmodule(frm[0])
modname = mod.__name__ if mod else frm[1]
print 'Thrown from', modname
问题是,如果模块没有被加载(因为读取该文件中的代码时抛出异常),那么inspect.getmodule
调用返回 None。因此,我们只使用有问题的框架引用的文件的名称。 (感谢您指出这一点,Stephan202!)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)