尝试块没有被执行

问题描述 投票:-1回答:1

这是我的代码。

p = range(0,3)
q = range(0,3)
d = range(0,3)
s = range(30,31)
P =range(0,1)
D = range(1,2)
Q = range(0,1)
lowest_aic= None
lowest_parm = None
lowest_param_seasonal = None
pdq = list(itertools.product(p, d, q))
seasonal_pdq = list(itertools.product(P,D,Q,s))
for param in pdq:
  for param_seasonal in seasonal_pdq:
    try:
      mod = sm.tsa.statespace.SARIMAX(data,order=param,seasonal_order=param_seasonal)
      results = mod.fit()

      current_aic = results.aic

      if (lowest_aic == None):
        lowest_aic = results.aic

      if (current_aic <= lowest_aic):
        lowest_aic = current_aic
        lowest_parm = param
        lowest_param_seasonal = param_seasonal
        #print('SARIMA{}x{} - AIC:{}'.format(param, param_seasonal, results.aic))
        print('SARIMA{},{} - AIC:{}'.format(param, param_seasonal, results.aic))
    except:
      continue


  print('SARIMA{}x{} - AIC:{}'.format(param, param_seasonal, results.aic))
  syhat_sar_c = results.predict(len(df), len(df)+6, typ='levels',dynamic=False)
  print(np.array(syhat_sar))

我试图为我的SARIMA模型实现一个网格搜索,我想知道为什么尝试块没有被执行,因为它抛出了UnboundLocal错误。

如果能详细解释一下就更好了。

这是我运行这段代码时得到的回溯。

---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-12-2669d247586e> in <module>()
     35 
     36 
---> 37   print('SARIMA{}x{} - AIC:{}'.format(param, param_seasonal, results.aic))
     38   syhat_sar_c = results.predict(len(df), len(df)+6, typ='levels',dynamic=False)
     39   print(np.array(syhat_sar))

NameError: name 'results' is not defined
python statsmodels try-except
1个回答
0
投票

有三种可能。

  1. pdq 是空的,所以外层的 for 循环立即退出,并且 try 永远不会被执行。
  2. seasonal_pdq 是空的,所以内部的 for 循环立即退出,并且 try 永远不会被执行。
  3. try 被执行,但它在你所依赖的变量被绑定之前就终止了。

你可以使用基本的调试技术来缩小这个范围。

  1. 打印 pdq 以确保它不是空的。
  2. 打印 seasonal_pdq 以确保它不是空的。
  3. 改变 continueraise 以便引发异常而不是忽略。 这样你就可以看到它是什么,到底来自哪一行。
© www.soinside.com 2019 - 2024. All rights reserved.