如何在 python 中捕获特定警告而不引发错误
How to capture specific warning without raising error in python
我正在 运行 不同的数据集,以确定每个数据集的最佳建模算法。我遍历每个数据集以检查各种算法和 select 基于测试分数的最佳模型。我知道我的一些数据集不会针对特定模型收敛(即:LogisticRegression)
并获得收敛警告(即:“lbfgs 收敛失败(状态=1):”)。我不想忽略警告。我的目标是 return 为收敛的模型打分,如果我收到此收敛警告则不会 return 任何值。
我可以通过使用“warnings.filterwarnings('error',category=ConvergenceWarning,module='sklearn')”将此警告变成错误来解决这个问题,然后尝试除了得到我想要的。这种方法的问题是,如果除了 sklearn convergance 警告之外还有任何其他错误,它将绕过 try 行,我将无法知道导致错误的原因。除了将其变为错误之外,还有其他方法可以捕获此警告吗?
这是我的代码的简化概述(数据未作为大数据集包含在内,我认为与问题无关)。我能够找到的大多数 Whosebug 问题都是关于如何抑制错误 (How to disable ConvergenceWarning using sklearn?) 或将此警告变成错误的,我没有找到任何其他方法来捕获警告而不将其变成错误。
from sklearn.linear_model import LogisticRegression
from sklearn.exceptions import ConvergenceWarning
warnings.filterwarnings('error',category=ConvergenceWarning, 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
。使用此语法,您可以打印与错误关联的错误消息。
我正在 运行 不同的数据集,以确定每个数据集的最佳建模算法。我遍历每个数据集以检查各种算法和 select 基于测试分数的最佳模型。我知道我的一些数据集不会针对特定模型收敛(即:LogisticRegression) 并获得收敛警告(即:“lbfgs 收敛失败(状态=1):”)。我不想忽略警告。我的目标是 return 为收敛的模型打分,如果我收到此收敛警告则不会 return 任何值。
我可以通过使用“warnings.filterwarnings('error',category=ConvergenceWarning,module='sklearn')”将此警告变成错误来解决这个问题,然后尝试除了得到我想要的。这种方法的问题是,如果除了 sklearn convergance 警告之外还有任何其他错误,它将绕过 try 行,我将无法知道导致错误的原因。除了将其变为错误之外,还有其他方法可以捕获此警告吗?
这是我的代码的简化概述(数据未作为大数据集包含在内,我认为与问题无关)。我能够找到的大多数 Whosebug 问题都是关于如何抑制错误 (How to disable ConvergenceWarning using sklearn?) 或将此警告变成错误的,我没有找到任何其他方法来捕获警告而不将其变成错误。
from sklearn.linear_model import LogisticRegression
from sklearn.exceptions import ConvergenceWarning
warnings.filterwarnings('error',category=ConvergenceWarning, 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
。使用此语法,您可以打印与错误关联的错误消息。