如何在 Python 中仅捕获某种类型的 ValueError?

Posted

技术标签:

【中文标题】如何在 Python 中仅捕获某种类型的 ValueError?【英文标题】:How can I catch only a certain type of ValueError in Python? 【发布时间】:2019-06-12 13:35:53 【问题描述】:

我处理数据,对于某些示例,数据存在问题。 Python 提出了一个

ValueError:残差在初始点不是有限的。

是否有可能仅通过消息"Residuals are not finite in the initial point." 捕获值错误? 我试过了:

try:
    [code that could raise the error]
except Exception as e:
    if e=='ValueError(\'Residuals are not finite in the initial point.\')':
        [do stuff I want when the Residuals are not finite]
    else:
        raise e

但它仍然一直引发错误。有没有办法实现我的想象?

谢谢

【问题讨论】:

【参考方案1】:

您可以像这样捕获 ValueError 异常:

try:

    #[code that could raise the error]

except ValueError as e:

    print("Residuals are not finite in the initial point. ...")
    #[do stuff I want when the Residuals are not finite]

【讨论】:

这不能回答问题,因为可以出于多种原因抛出 ValueError。 MaxS 对带有问题中描述的消息的 ValueError 特别感兴趣。 是的,但我想只捕捉那些显示我提到的消息的人。【参考方案2】:
try:
    [code that could raise the error]
except ValueError as e:
    if len(e.args) > 0 and e.args[0] == 'Residuals are not finite in the initial point.':
        [do stuff I want when the Residuals are not finite]
    else:
        raise e

您可能需要检查e.args[0] 是否完全包含此字符串(引发错误并打印e.args[0]

另见documentation about BaseException.args

【讨论】:

为了完整起见,您可能需要引用docs,尤其是以“The except 子句可能”开头的段落。在尝试访问 e.args[0] 之前先检查 if len(e.args) 也可能是明智的,以防代码引发更多没有输入的 ValueErrors。 @Reti43 我已经增强了答案。谢谢。

以上是关于如何在 Python 中仅捕获某种类型的 ValueError?的主要内容,如果未能解决你的问题,请参考以下文章

如何从模板中的自定义帖子类型中仅提取一个类别?

如何从 preg_match 中仅获取命名捕获? [复制]

在 AVCapture Swift 中仅捕获相机预览

如何使用 django ORM 在 postgres 中仅选择日期部分

Nullable-如何在 C# 中的 DateTime 类型中仅比较没有时间的日期?

如何在 Visual Studio 代码中仅搜索特定文件类型?