提问人:rseppi 提问时间:7/4/2023 最后编辑:rseppi 更新时间:7/4/2023 访问量:39
从 python 中的 C 库中捕获错误
Catch an error from a C library in python
问:
我正在将一些数据点拟合到 python 中的贝叶斯框架(类似 mcmc)中的模型。我正在使用 C 库来预测模型。对于某些参数集,C 库无法计算模型,因为它预测了一些非物理参数(举一个不相关的例子,就好像它预测质量<0 一样)。发生这种情况时,C 代码包含一个“exit()”。因此,参数空间的采样停止。我想忽略模型预测失败的特定参数组合,并继续进行采样。我尝试使用'try'-'except',但这不起作用,因为外部C代码仍然失败,并且python代码在移动到“expcept”之前停止。我无法修改 C 库。有没有办法在不停止python中的参数采样的情况下从C代码中捕获错误?
下面是一段类似的代码:
def my_likelihood(params):
try:
model = model_from_c_library(x_data, params)
diff = model - y_data
like = -0.5 * ((diff / err) ** 2).sum()
if (np.isnan(like) | np.isinf(like) | np.isnan(model).any()):
like = -1e30
except:
like = -1e30
return like
就我而言,“model_from_c_library”返回错误并且 python 代码停止,因为在 model_from_c_library.c 中,有类似的东西:
double mass(pars):
m = predict_mass(pars);
if m < 0:
exit(101);
我想在 Python 中将其作为例外。
答: 暂无答案
评论