2012-06-12 67 views
0

在這裏IndexError串索引超出範圍是我的代碼(目前):引用第一個字符

conn = sqlite3.connect(db) 
conn.text_factory = str #bugger 8-bit bytestrings 
cur = conn.cursor() 

reader = csv.reader(open(csvfile, "rU"), delimiter = '\t') 
for Number, Name, Message, Datetime, Type in reader: 

# populate subscriber table 
if str(Number)[0] == '1': # errors on this line 
    tmpNumber = str(Number)[1:] 
    Number = int(tmpNumber) 
cur.execute('INSERT OR IGNORE INTO subscriber (name, phone_number) VALUES (?,?)', (Name, Number)) 

cur.close() 
conn.close() 

它發表了評論,表示該行返回該錯誤的錯誤在於:

IndexError: string index out of range 

所有的數字都有值,但如果電話號碼以1開頭,我想在刪除1之前將其插入到數據庫中。爲什麼這不工作?在嘗試引用第一個字符之前,我將它轉換爲字符串,所以我不明白爲什麼這不起作用。

回答

1

看起來像你正在得到一個空字符串。嘗試用下面的代碼替換你的if語句,看看它是否有效。

if str(Number).startswith('1'): 

(編輯以反映使用startswith代替切片[:1]的@kindall的建議)。

+0

工作,謝謝!現在要弄清楚爲什麼沒有數據寫入數據庫.... – Dan

+0

它不讓我把這個標記爲答案,我想我必須先等待7分鐘。任何想法爲什麼沒有從文件讀入數據庫?標準csv文件,製表符分隔.... – Dan

+0

沒有被'csv'讀入或沒有被添加到數據庫?你有可能只有空行嗎?我會添加一個'else'子句,當你得到一個空字符串時打印出所有讀取的內容。所有你需要的是一個空的數字列來產生錯誤。此外,您不應該需要將Number轉換爲字符串,它應該是一個字符串,因此您需要先將其轉換爲int ... –