2012-02-27 2 views
-4
import re 

address1 = [] 
address2 = [] 
city = [] 
state = [] 
zipCode = [] 

modifiedShipping_address1 = (
    ['#### Example Rd. SE', 'City, OH\xa0#####', 'United States', ''], 
    ['### Street Ct', 'Apt B', 'City, SC\xa0#####', 'United States', '']) 

for i in modifiedShipping_address1: 
    address1.append(i[0]) 
    if len(i) == 4: 
     address2.append('') 
     cityIndex = str(i[1]).find(',') 
     city.append(i[1][:cityIndex]) 
     state_re = re.compile(', (.*?)\\xa0') 
     state_pat = re.findall(state_re, str(i[1]).strip()) 
     for i in state_pat: 
      state.append(i) 
      zip_re = re.compile('\\xa0(.*?)') 
      zip_pat = re.findall(zip_re, str(i[1]).strip()) 
      for i in zip_pat: 
       zipCode.append(i) 
    else: 
     address2.append(i[1]) 
     cityIndex = str(i[2]).find(',') 
     city.append(i[2][:cityIndex]) 
     state_re = re.compile(', (.*?)\\xa0') 
     state_pat = re.findall(state_re, str(i[2]).strip()) 
     for i in state_pat: 
      state.append(i) 
     zip_re = re.compile('\\xa0(.*?)') 
     # This line throws the exception: 
     zip_pat = re.findall(zip_re, str(i[2]).strip()) 
     for i in zip_pat: 
      zipCode.append(i) 
    state = state[:] 
    zipCode = zipCode[:] 

    print state 
    print zipCode 

При запуске кода производит этот вывод:питона 2,7 итерация ошибка индекс

['OH'] 
[] 
Traceback (most recent call last): 
    File "iterating.py", line 37, in <module> 
    zip_pat = re.findall(zip_re, str(i[2]).strip()) 
IndexError: string index out of range 

Как идти о Fixin это? Спасибо. Я не понимаю, откуда приходит indexError.

+2

Недействительный код python, пожалуйста, исправьте отступ – mykhal

+0

THus исправлено – phales15

+0

Просьба привести полный пример, демонстрирующий вашу проблему. Данный код имеет множество проблем, которые препятствуют воспроизведению вашей проблемы: отступ по-прежнему является незаконным Python; отсутствуют строки, начинающиеся или закрывающие кавычки; последовательность «\ xa #» является недопустимой строкой; address1, address2, city, state и zipCode не объявлены. Кроме того, неясно, какой текст должен быть результатом вашей программы и действительно ли это полный немодифицированный вывод. – Weeble

ответ

0

Вы получаете эту ошибку, потому что последний элемент modifiedShipping_address1 является пустой строкой.

1

Ваша проблема заключается в том, что вы повторно используете переменную i для каждой переменной цикла. Строка кода, который бросает исключение, кажется, ожидать i будет переменная цикла из внешнего цикла:

for i in modifiedShipping_address1: 

Однако, на данный момент i фактически последнее значение итерированного над петлей:

for i in state_pat: 

Обратите внимание, что в циклах Python, for петли не вводят отдельную область для своей переменной цикла или содержимого. Это просто еще одна локальная переменная в этой функции, и после завершения цикла ничего не произойдет. Он просто сохраняет свое значение с последнего момента цикла, пока ему не присвоено новое значение. Вы можете избежать этой проблемы, используя разные переменные для каждого цикла, желательно с более описательными именами, чем i.


Пожалуйста, больше заботы в будущем размещать код, который работает (или, по крайней мере, показывает проблемы, по вашему мнению, он делает), чтобы объяснить вашу проблему, и, чтобы просмотреть вопрос, чтобы убедиться, что код появляется по вашему желанию. Страница SCCEE, которую DSM относится к вам, является отличным руководством. Если вы последуете за ним, вы получите лучшую помощь и меньше downvotes.

Смежные вопросы