Получение «Ошибки имени: имя не определено» при доступе к ранее определенным переменным

#python #nameerror

Вопрос:

Я получаю ошибку имени: имя «index1» не определено в последнем операторе if. Я не понимаю, в чем проблема, так как я определил index1 и index2 в предыдущем блоке кода.

 ... else:  for l1 in Xdisp_list:  for l2 in l1:  if l2 == from_previous[run_number-2]:  index1 = (wn_final.index(l1))  index2 = (wn_final[wn_final.index(l1)].index(l2))  else:  pass  if w_ki - Xdisp_list[index1][index2] lt; delta:  code_list_run.append(0) ...  

Для уточнения кода:
Xdisp_list-это список списков
run_number-это целое число
wn_final также является списком списков

Ответ №1:

вы определяете index1 и index2 внутри оператора if else, поэтому, если оператор l2 == from_previous[run_number-2] False принимает значение, ни один из них не будет определен при вычислении строки w_ki - Xdisp_list[index1][index2] lt; delta ,

вы можете либо добавить второй оператор if внутри первого, либо определить значения по умолчанию index1 и index2, как это, и в этом случае оператор else больше не нужен

 else:  for l1 in Xdisp_list:  for l2 in l1:  if l2 == from_previous[run_number-2]:  index1 = (wn_final.index(l1))  index2 = (wn_final[wn_final.index(l1)].index(l2))   if w_ki - Xdisp_list[index1][index2] lt; delta:  code_list_run.append(0)