打印出 ValueError 的实际错误消息

Posted

技术标签:

【中文标题】打印出 ValueError 的实际错误消息【英文标题】:Printing out actual error message for ValueError 【发布时间】:2011-05-05 02:10:59 【问题描述】:

当我捕捉到 ValueError 的消息后,如何实际打印出来?

如果我在代码中输入except ValueError, err: 而不是except ValueError as err:,则会收到错误SyntaxError: invalid syntax

【问题讨论】:

【参考方案1】:

使用logging的另一种方法

import logging
try:
    int("dog")
except Exception as e:
    logging.warning(e)
    logging.error(e)

给予

WARNING:root:invalid literal for int() with base 10: 'dog'
ERROR:root:invalid literal for int() with base 10: 'dog'

[Program finished]

只需键入异常即可,

invalid literal for int() with base 10: 'dog'

[Program finished]

取决于您希望如何处理输出

【讨论】:

【参考方案2】:

Python 3 要求在打印之前将异常转换为字符串:

try:
    ...
except ValueError as error:
    print(str(error))

【讨论】:

这仍然不是真的。 print(error) 在 Python 3 的上下文中工作得很好。 @snapshoe 如果这不是真的,为什么它会被投票?也许在某些情况下确实需要它?我对此表示怀疑,但谁知道【参考方案3】:
try:
    ...
except ValueError as e:
    print(e)

【讨论】:

请注意,在 Python 3 中,您必须显式转换为字符串:print(str(e)) 在 Python 3 中必须显式转换为字符串是不正确的。至少从 3.5 开始。 请注意,在 Python 3 中,您必须显式转换为字符串:print(str(e)),至少对于 Python 3.6.6 @Bengt 我认为您应该将其发布为答案。 Python 3.7.5 需要强制转换 我同意@snapshoe,这不是真的,在打印之前必须将异常对象转换为字符串;您在 print 函数文档中有这样的内容:“所有非关键字参数都转换为字符串,如 str() 确实”。我只能假设,所以请耐心等待,但是当确实需要强制转换时,您可能已经完成了像 print('Error is: ' + str(e)) 这样的连接,但这是因为连接而不是 print 函数。

以上是关于打印出 ValueError 的实际错误消息的主要内容,如果未能解决你的问题,请参考以下文章

ValueError:传递的项目数错误 1,位置暗示 2

Python CodeLab 关于异常的问题——尝试,除了 ValueError

指定错误类型时如何打印异常? [复制]

为啥逻辑回归会抛出转换错误(valueerror)?

在 python 中打印出文本文件会给出错误消息 -charmap_decode(input,errors,decoding_table) [重复]

紧密布局抛出错误:ValueError:max()arg是一个空序列