在Python中查找源异常的模块名

2024-09-29 21:25:28 发布

您现在位置:Python中文网/ 问答频道 /正文

示例:

>>> try:
...    myapp.foo.doSomething()
... except Exception, e:
...    print 'Thrown from:', modname(e)

Thrown from: myapp.util.url

在上面的示例中,异常实际上是在myapp/util处引发的/网址.py模块。有没有办法得到那个模块的__name__?在

我的意图是在logging.getLogger函数中使用这个函数。在


Tags: 模块函数fromurl示例fooutilexception
3条回答

这应该是有效的:

import inspect

try:
    some_bad_code()
except Exception, e:
    frm = inspect.trace()[-1]
    mod = inspect.getmodule(frm[0])
    print 'Thrown from', mod.__name__

编辑:Stephan202提到了一个角落的案子。在这种情况下,我想我们可以默认为文件名。在

^{pr2}$

问题是如果模块没有被加载(因为在读取该文件中的代码时抛出了异常),那么inspect.getmodule调用将返回None。所以,我们只使用违规帧引用的文件名。(谢谢你指出这一点,斯蒂芬202!)在

这应该可以做到:

import inspect
def modname():
    t=inspect.trace()
    if t:
        return t[-1][1]

您可以使用traceback module,以及^{},以编程方式获取回溯:

try:
    myapp.foo.doSomething()
except Exception, e:
    exc_type, exc_value, exc_tb = sys.exc_info()
    filename, line_num, func_name, text = traceback.extract_tb(exc_tb)[-1]
    print 'Thrown from: %s' % filename

相关问题 更多 >

    热门问题