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
这就是解释器报告语法错误的原因。
很抱歉发布这么长的代码,我尽可能缩短了它,但我认为问题可能与长循环中的行定位不正确有关,所以我认为有必要说明直到出现错误的地方。
在倒数第 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
这就是解释器报告语法错误的原因。