2024-09-29 21:25:28 发布
网友
示例:
>>> try: ... myapp.foo.doSomething() ... except Exception, e: ... print 'Thrown from:', modname(e) Thrown from: myapp.util.url
在上面的示例中,异常实际上是在myapp/util处引发的/网址.py模块。有没有办法得到那个模块的__name__?在
__name__
我的意图是在logging.getLogger函数中使用这个函数。在
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提到了一个角落的案子。在这种情况下,我想我们可以默认为文件名。在
问题是如果模块没有被加载(因为在读取该文件中的代码时抛出了异常),那么inspect.getmodule调用将返回None。所以,我们只使用违规帧引用的文件名。(谢谢你指出这一点,斯蒂芬202!)在
inspect.getmodule
这应该可以做到:
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
这应该是有效的:
编辑:Stephan202提到了一个角落的案子。在这种情况下,我想我们可以默认为文件名。在
^{pr2}$问题是如果模块没有被加载(因为在读取该文件中的代码时抛出了异常),那么
inspect.getmodule
调用将返回None。所以,我们只使用违规帧引用的文件名。(谢谢你指出这一点,斯蒂芬202!)在这应该可以做到:
您可以使用traceback module,以及^{} ,以编程方式获取回溯:
相关问题 更多 >
编程相关推荐