Найти - Пользователи
Полная версия: Ошибка "list assignment index out of range"
Начало » Python для новичков » Ошибка "list assignment index out of range"
1
M
Добрый вечер!
Написал скрипт, который парсит XML-файл, вытягивает оттуда нужные данные и заносит их в таблицу БД в виде SQL-запроса.

# -*- coding: utf8 -*-
import MySQLdb
import urllib2
import urlparse
from xml.dom.minidom import parse
def my_get():
    url = open('D:\excel ver 3.xml')
    xml = parse(url)
    name = xml.getElementsByTagName('Workbook')
    for node in name:
	    el = node.getElementsByTagName('Cell')
	    title = []
	    sql_ = []
	    i = 0
	    j = 0
	    z = 0
	    zm = 0
	    while i < len(el):
		    if (el[i].hasAttribute('ss:StyleID')) and (el[i].attributes['ss:StyleID'].value == "s274"):
			    title.append(el[i].getElementsByTagName('Data')[0].firstChild.nodeValue)
			    print title[j]
			    j += 1
		    i += 1
    print i
    print j
    print repr(title).decode("unicode_escape")
    con = MySQLdb.connect(host="localhost", user="root", passwd="vertrigo", db="moodle", use_unicode=True, charset='utf8')
    cur = con.cursor()
    while z < j:
	    zm = z+1
	    sql_[z]="UPDATE mdl_course_sections SET name='"+title[z]+"' WHERE (course='12' AND section='1');"
	    try:
		    cur.execute(sql_[z])
	    except MySQLdb.DatabaseError, err:
		    print u"Ошибка:", err
	    else:
		    print u"Запрос успешно выполнен"
	    con.commit()
	    z += 1
    cur.close()
    con.close()

При запуске возникает следующее:
Теоретические основы проектирования информационных систем
Методология проектирования ИС
Подходы и методики проектирования ИС
Внедрение, сопровождение, обслуживание и развитие ИС
570
4


Traceback (most recent call last):
File “<pyshell#2>”, line 1, in <module>
my_parser4.my_get()
File “C:\Python26\my_parser4.py”, line 32, in my_get
sql_=“UPDATE mdl_course_sections SET name='”+title+“' WHERE (course='12' AND section='1');”
IndexError: list assignment index out of range


Видно, что j становится равным 4, а я ведь потом обращаюсь к элементы с нулевым индексом. Не понимаю, почему вылезает list assignment index out of range
dimy44
>>> L = []
>>> L[0] = 1
Traceback (most recent call last):
  File "<console>", line 1, in ?
IndexError: list assignment index out of range
>>>
из примера видно, что у L нет значения с индексом 0, он пустой.
M
Типа прога говорит, что массив title пустой? Но как так, если после выполнения цикла, я прошу вывести массив на экран и он его выводит!
dimy44
У Вас пустой список sql_, на нем падает при попытке изменить в нем нулевой элемент.
M
А как тогда обойти данную ошибку?? Подскажите, пожалуйста, а то я не особо разбираюсь в python'е..
dimy44
Юзайте метод append, имеющийся у списка, для добавления в него элемента.
M
Большое спасибо за помощь!)
M
Подскажите ещё, пожалуйста, кое-что!
Я хочу изменить запрос так, чтобы в условии WHERE (course='12' AND section='1') вместо section='1' он искал section равную значению элемента zm. Как это реализовать? А то на условие вида WHERE (course='12' AND section='“+zm+”') питон ругается следующим образом:
Traceback (most recent call last):
File “<pyshell#1>”, line 1, in <module>
my_parser4.my_get()
File “C:\Python26\my_parser4.py”, line 32, in my_get
sql_.append(“UPDATE mdl_course_sections SET name='”+title+“' WHERE (course='12' AND section='”+zm+“');”)
TypeError: coercing to Unicode: need string or buffer, int found
dimy44
Вы пытаетесь склеить строки с типом int (zm), что в Питоне недопустимо. Раз Вы там все плюсуете, напишите unicode(zm) вместо zm.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB