重试直到没有 RuntimeWarning

Retry until no RuntimeWarning

我正在尝试使用 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" 放入 while 循环和 "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

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

while True:
    try: 
        #your code here

        break
    except Exception as e:
        continue

您可以使用 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