An syntaxError: invalid syntax at the line of else operator in the loop

An syntaxError: invalid syntax at the line of else operator in the loop

很抱歉发布这么长的代码,我尽可能缩短了它,但我认为问题可能与长循环中的行定位不正确有关,所以我认为有必要说明直到出现错误的地方。

在倒数第 10 行(标记为“# Error aries here (!)”)的“else”运算符行,我收到错误“SyntaxError:语法无效”。我最初的直觉是错误可能与运算符的不当定位有关,但错误的文本似乎并没有这么说(我会期待“IndentationError:意外缩进”错误)并且在我看来“ else" 运算符位置正确。

谢谢。

if (Test_set.loc[n, '4_signals'] == 1):

 if (Portfolio_1_4_Date_sell < pd.Timestamp(Test_set.loc[n, 'feedTimestamp'])):

   try: 
        SP1500selldate_2 = n_short
        SP1500sellprice_2 = SP1500DailyReturns.loc[SP1500selldate_2, 'S&P 1500 SUPER COMPOSITE'] 
   except KeyError:
     try:
       SP1500buydate_2 = SP1500buydate_2 - pd.Timedelta("1 day") 

     except KeyError:
       SP1500buydate_2 = SP1500buydate_2 - pd.Timedelta("2 days") 
   
   Test_set.loc[n, 'Portfolio_2_4'] = Portfolio_2_4
  
   try: 
        SP1500selldate_3 = n_short
        SP1500sellprice_3 = SP1500DailyReturns.loc[SP1500selldate_3, 'S&P 1500 SUPER COMPOSITE - PRICE INDEX']

   except KeyError:
     try:
       SP1500buydate_3 = SP1500buydate_3 - pd.Timedelta("1 day") 

     except KeyError:
       SP1500buydate_3 = SP1500buydate_3 - pd.Timedelta("2 days")  
   
   Portfolio_3_4 = Portfolio_3_4 * SP1500sellprice_3 / SP1500buyprice_3
   SP1500buydate_3_SP1500 = n_short
   Test_set.loc[n, 'Portfolio_3_4'] = Portfolio_3_4

 else:
   Test_set.loc[n, 'Portfolio_1_4_allocation'] = 'Portfolio 1 is already allocated!'
   Test_set.loc[n, 'Portfolio_1_4'] = Portfolio_1_4
     
   try: 
        SP1500selldate_3 = n_short
        SP1500sellprice_3 = SP1500DailyReturns.loc[SP1500selldate_3, 'S&P 1500 SUPER COMPOSITE - PRICE INDEX']

   except KeyError:
     try:
       SP1500buydate_3 = SP1500buydate_3 - pd.Timedelta("1 day") 
       SP1500buydate_3_str = SP1500buydate_3.strftime("%Y-%m-%d")

     except KeyError:
       SP1500buydate_3 = SP1500buydate_3 - pd.Timedelta("2 days") 
       SP1500buydate_3_str = SP1500buydate_3.strftime("%Y-%m-%d")

           
   Portfolio_3_4 = Portfolio_3_4 * SP1500sellprice_3 / SP1500buyprice_3
   SP1500buydate_3_SP1500 = n_short
   Test_set.loc[n, 'Portfolio_3_4'] = Portfolio_3_4

   else:    # Error arises here (!)
     Test_set.loc[n, 'Portfolio_2_4_allocation'] = 'Portfolio 1 and 2 are already allocated!'
     Test_set.loc[n, 'Portfolio_2_4'] = Portfolio_2_4
     if (Portfolio_3_4_Date_sell < pd.Timestamp(Test_set.loc[n, 'feedTimestamp'])):
       Portfolio_3_4 = Portfolio_3_4 * Test_set.loc[n, 'Cumulative stock Returns over the 30 days after transaction  (22 working days)'] 
       Test_set.loc[n, 'Portfolio_3_4'] = Portfolio_3_4
       Portfolio_3_4_Date_sell = Date_Buy + pd.Timedelta("30 days")
     else:
       Test_set.loc[n, 'Portfolio_3_4_allocation'] = 'Portfolio 1, 2 and 3 are already allocated!'
       Test_set.loc[n, 'Portfolio_3_4'] = Portfolio_3_3

如果你正在尝试

try:
    #something
except KeyError:
    #something
else:
    #something

那么在 try 的缩进级别它们之间不能有任何东西。 您的代码类似于

try:
    #something
except KeyError:
    #something
#something
else:
    #something

这就是解释器报告语法错误的原因。