首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解`traceback.format_exception_only()‘

理解`traceback.format_exception_only()‘
EN

Stack Overflow用户
提问于 2018-09-21 12:43:20
回答 1查看 1.3K关注 0票数 1

我只想打印异常类型和消息。

我最初尝试过:

代码语言:javascript
复制
try:
    raise Exception("duh!!!")
except Exception as err:
    print(err)

但这只是打印异常消息。

代码语言:javascript
复制
 duh!!!

然后我翻阅了整个 doc,我觉得traceback.format_exception_only()是我要找的。

所以我试了如下:

代码语言:javascript
复制
try:
    raise Exception("duh!!!")
except:
    etype, evalue, tb = sys.exc_info()
    print(traceback.format_exception_only(etype, evalue)))

它印刷如下:

代码语言:javascript
复制
['Exception: duh!!!\n']

在我看来有点出乎意料。所以我重读了这个方法的文档。它说:

格式化跟踪的异常部分。参数是异常类型和值,如sys.last_typesys.last_value提供的。返回值是字符串列表,每个字符串以换行符结尾。通常,列表包含一个字符串;但是,对于SyntaxError异常,它包含几行(打印时)显示语法错误发生位置的详细信息。指示发生哪个异常的消息是列表中的最后一个字符串。

因此,我了解到doc说它是一个列表,这就是为什么输出[...]中有一个列表。另外,doc说每一行都以换行符结尾,这就是为什么输出中有\n。但是我不知道什么时候会有多行SyntaxError?我无法生成SyntaxError,这将导致format_exception_only()返回值的多行。

同时,我突然发现我可以简单地做些什么。

代码语言:javascript
复制
try:
    raise Exception("duh!!!")
except:
    etype, evalue, tb = sys.exc_info()
    print('{}: {}'.format(etype.__name__, evalue))

要获得

代码语言:javascript
复制
Exception: duh!!!

但是,format_exception_only()如何为其增加更多的价值呢?

EN

回答 1

Stack Overflow用户

发布于 2021-06-21 01:17:46

Python是开源的,所以您可以查看实现并决定自己的额外价值是什么:

代码语言:javascript
复制
    if self.exc_type is None:
        yield _format_final_exc_line(None, self._str)
        return

    stype = self.exc_type.__qualname__
    smod = self.exc_type.__module__
    if smod not in ("__main__", "builtins"):
        stype = smod + '.' + stype

    if not issubclass(self.exc_type, SyntaxError):
        yield _format_final_exc_line(stype, self._str)
    else:
        yield from self._format_syntax_error(stype)

这是一个相当简单的函数,所以是的,根据您的问题,如果忽略不使用的功能的部分,它不会给您带来多大的价值。

当然,如果将来有任何异常更改,或者如果异常引发程序开始返回SyntaxErrors,或者将来出现的任何其他边缘情况,那么现在就需要维护代码了。

减少维护和增加可读性(因为每个人都知道库代码是干什么的)是使用标准库代码的两个相对普遍的优点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52444076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档