2012-02-27 197 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 2012-02-27 22:00:24

+0

因此已修復 – phales15 2012-02-27 22:05:52

+0

請提供一個完整的示例來演示您的問題。給定的代碼有很多問題可以阻止你的問題的再現:縮進仍然是非法的Python;有字符串缺少開始或結束引號; 「\ xa#」序列是無效字符串;地址1,地址2,城市,州和zipCode未申報。另外,還不清楚程序輸出的文本是什麼,它確實是完整的未修改的輸出。 – Weeble 2012-02-27 22:14:26

回答

0

您正在收到該錯誤,因爲modifiedShipping_address1的最後一個元素是空字符串。

1

你的問題是你重新使用變量i爲每個單循環變量。的拋出異常的代碼行似乎期待i是從外循環的循環變量:

for i in modifiedShipping_address1: 

然而,在這一點上i實際上是在最後一個值遍歷由循環:

for i in state_pat: 

請注意,在Python中,for循環不會爲其循環變量或內容引入單獨的作用域。它只是函數中的另一個局部變量,在循環結束後沒有任何重置它的地方。它只保留從循環最後一次開始的值,直到它被分配一個新的值。您可以通過爲每個循環使用不同的變量來避免此問題,最好使用比i更多的描述性名稱。


請多加小心的在未來發布的作品(或至少表明你要求它的問題)代碼,解釋清楚你的問題,並以預覽您的問題,以確保代碼按照您的意圖出現。 DSM引用您的SCCEE頁面是一個很好的指南。如果你遵循它,你會得到更好的幫助和更少的價值。