重试直到没有RuntimeWarning

时间:2017-01-16 17:41:29

标签: python numpy error-handling scipy emcee

我正在尝试使用MCMC为某些数据拟合曲线。

由于我的特殊问题的性质,偶尔(运行代码的1/5)会遇到一些奇点,代码会引发一个RuntimeWarning并继续给出错误的答案。

/Library/Python/2.7/site-packages/emcee-2.2.1-py2.7.egg/emcee/ensemble.py:335: RuntimeWarning: invalid value encountered in subtract
/Library/Python/2.7/site-packages/emcee-2.2.1-py2.7.egg/emcee/ensemble.py:336: RuntimeWarning: invalid value encountered in greater

这基本上是因为我正在记录高斯,并且其中一个建议的均值值等于其中一个数据点。

我想重试运行代码,可能使用try和except,直到这些运行时警告没有发生。 谢谢!

编辑: 在@sgDysregulation发表评论后,我尝试过:

while True:
    try:
        print "Before mcmc"
        sampler.run_mcmc(pos, 500)
        print "After mcmc"
        break
    except Exception as e:
        print "Warning detected"
        continue

我尝试过使用“pass”和“continue”语句,将“break”放在循环内部和“try”内部。还试过“RuntimeWarning”而不是“Exception”。

上面代码段的输出未显示已检测到任何警告。

Before mcmc
/Library/Python/2.7/site-packages/emcee-2.2.1-py2.7.egg/emcee/ensemble.py:335: RuntimeWarning: invalid value encountered in subtract
/Library/Python/2.7/site-packages/emcee-2.2.1-py2.7.egg/emcee/ensemble.py:336: RuntimeWarning: invalid value encountered in greater
After mcmc

2 个答案:

答案 0 :(得分:1)

您可以使用np.errstate上下文管理器捕获警告,就好像它是一个例外:

while True:
    try:
        print("Before mcmc")
        with np.errstate(all='raise'):
            sampler.run_mcmc(pos, 500)
        print("After mcmc")
        break
    except Exception:
        print("Warning detected")
        continue

答案 1 :(得分:0)

建议您在问题中包含您目前所尝试的内容,

while True:
    try: 
        #your code here

        break
    except Exception as e:
        continue