Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 28, 2012 17:59:46

M
Зарегистрирован: 2012-12-27
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка "list assignment index out of range"

Добрый вечер!
Написал скрипт, который парсит 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

Офлайн

#2 Дек. 28, 2012 18:40:33

dimy44
От: Евпатория
Зарегистрирован: 2012-04-21
Сообщения: 463
Репутация: +  42  -
Профиль  

Ошибка "list assignment index out of range"

>>> L = []
>>> L[0] = 1
Traceback (most recent call last):
  File "<console>", line 1, in ?
IndexError: list assignment index out of range
>>>
из примера видно, что у L нет значения с индексом 0, он пустой.

Офлайн

#3 Дек. 28, 2012 19:40:33

M
Зарегистрирован: 2012-12-27
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка "list assignment index out of range"

Типа прога говорит, что массив title пустой? Но как так, если после выполнения цикла, я прошу вывести массив на экран и он его выводит!

Офлайн

#4 Дек. 28, 2012 19:48:55

dimy44
От: Евпатория
Зарегистрирован: 2012-04-21
Сообщения: 463
Репутация: +  42  -
Профиль  

Ошибка "list assignment index out of range"

У Вас пустой список sql_, на нем падает при попытке изменить в нем нулевой элемент.

Офлайн

#5 Дек. 28, 2012 20:24:17

M
Зарегистрирован: 2012-12-27
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка "list assignment index out of range"

А как тогда обойти данную ошибку?? Подскажите, пожалуйста, а то я не особо разбираюсь в python'е..

Офлайн

#6 Дек. 28, 2012 20:32:35

dimy44
От: Евпатория
Зарегистрирован: 2012-04-21
Сообщения: 463
Репутация: +  42  -
Профиль  

Ошибка "list assignment index out of range"

Юзайте метод append, имеющийся у списка, для добавления в него элемента.

Офлайн

#7 Дек. 28, 2012 21:33:31

M
Зарегистрирован: 2012-12-27
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка "list assignment index out of range"

Большое спасибо за помощь!)

Офлайн

#8 Дек. 28, 2012 21:40:48

M
Зарегистрирован: 2012-12-27
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка "list assignment index out of range"

Подскажите ещё, пожалуйста, кое-что!
Я хочу изменить запрос так, чтобы в условии 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

Офлайн

#9 Дек. 28, 2012 22:07:16

dimy44
От: Евпатория
Зарегистрирован: 2012-04-21
Сообщения: 463
Репутация: +  42  -
Профиль  

Ошибка "list assignment index out of range"

Вы пытаетесь склеить строки с типом int (zm), что в Питоне недопустимо. Раз Вы там все плюсуете, напишите unicode(zm) вместо zm.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version