微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在不引发python错误的情况下捕获特定警告

如何解决如何在不引发python错误的情况下捕获特定警告

我正在运行不同的数据集来确定每个数据集的最佳建模算法。我遍历每个数据集以检查各种算法并根据测试分数选择最佳模型。我知道我的一些数据集不会针对特定模型收敛(即:LogisticRegression) 并收到收敛警告(即:“lbfgs 未能收敛(状态 = 1):”)。我不想忽略警告。我的目标是为收敛的模型返回分数,如果收到此收敛警告,则不返回任何值。

我可以通过使用“warnings.filterwarnings('error',category=ConvergenceWarning,module='sklearn')”将这个警告转换为错误解决这个问题,然后通过 try and except 得到我想要的。这种方法的问题是,如果除了 sklearn convergance 警告之外还有任何其他错误,它将绕过 try 行,我将无法知道导致错误的原因。除了将其转换为错误之外,还有其他方法可以捕获此警告吗?

这是我的代码的简化概述(数据未包含在大数据集中,我认为与问题无关)。我能找到的大多数stackoverflow问题都是关于如何抑制错误How to disable ConvergenceWarning using sklearn?)或将此警告转换为错误,我没有找到任何其他方法来捕获警告而不将其转换为错误

  from sklearn.linear_model import LogisticRegression
  from sklearn.exceptions import ConvergenceWarning
  warnings.filterwarnings('error',module='sklearn')
  try:
      model=LogisticRegression().fit(x_train,y_train)
      predict=model.predict(x_test)
  except:
      print('model didnt converge')

解决方法

这里有几件事可以帮助您。

首先,您可以指定要查找的异常类型,任何您都可以指定多个 except 子句。以下是来自 the docs 的示例:

import sys

try:
    f = open('myfile.txt')
    s = f.readline()
    i = int(s.strip())
except OSError as err:
    print("OS error: {0}".format(err))
except ValueError:
    print("Could not convert data to an integer.")
except:
    print("Unexpected error:",sys.exc_info()[0])
    raise

上面要注意的另一件事是 except OSError as err。使用此语法,您可以打印与错误相关的错误消息。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。