如何解决如何在不引发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 举报,一经查实,本站将立刻删除。