在Python中查找原始异常的模块名称

2023-11-21

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(使用前将#替换为@)

在Python中查找原始异常的模块名称 的相关文章

随机推荐