Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 19.02.2020
Сообщений: 7

Цикл (list index out of range)

19.02.2020, 11:37. Показов 2292. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день! Помогите понять почему при использовании цикла и передачи переменной в sheet.row_values(s)[12], код выдает ошибку list index out of range, а при явном указании числа цикл выполняется корректно.
код
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import ipaddress
from tkinter import*
from tkinter import ttk
from tkinter.filedialog import askopenfilename
import os
import xlrd,xlwt
import easygui
Exel=easygui.fileopenbox(filetypes=["*.xlsx"])
Save=os.path.dirname(Exel)
file=xlrd.open_workbook(f'{Exel}')
sheet=file.sheet_by_index(0)
s=1
while s<=100:
    Unit=sheet.row_values(s)[12]
    if Unit==2:
        nameFile=sheet.row_values[s][1]
        create=open(f'{Save}{nameFile}.txt','w')
        VLAN=int(sheet.row_values(s)[2])
        RouterID=sheet.row_values(s)[3]
        RouterID=ipaddress.ip_address(f'{RouterID}')
        intVlan=sheet.row_values(s)[4]
        intVlan=ipaddress.ip_address(f'{intVlan}')
        MASK=sheet.row_values(s)[5]
        VIDEO=sheet.row_values(s)[6]
        TELEM=sheet.row_values(s)[7]
        MANAGEMENT=sheet.row_values(s)[8]
        uplink=int(sheet.row_values(s)[9])
        Camera=int(sheet.row_values(s)[10])
        area=sheet.row_values(s)[11]
        area=ipaddress.ip_address(f'{area}')
        with open(f'{Save}{nameFile}.txt','w') as create:
            create.write(f'''vlan database
vlan 20,40,50,999
exit
''')
   elif Unit==3:
        nameFile=sheet.row_values(s)[1]
        create=open(f'{Save}{nameFile}.txt','w')
        VLAN=int(sheet.row_values(s)[2])
        RouterID=sheet.row_values(s)[3]
        RouterID=ipaddress.ip_address(f'{RouterID}')
        intVlan=sheet.row_values(s)[4]
        intVlan=ipaddress.ip_address(f'{intVlan}')
        MASK=sheet.row_values(s)[5]
        VIDEO=sheet.row_values(s)[6]
        TELEM=sheet.row_values(s)[7]
        MANAGEMENT=sheet.row_values(s)[8]
        uplink=int(sheet.row_values(s)[9])
        Camera=int(sheet.row_values(s)[10])   
        area=sheet.row_values(s)[11]
        area=ipaddress.ip_address(f'{area}')
        Serv=sheet.row_values(s)[13]
        Serv=int(Serv)
        with open(f'{Save}{nameFile}.txt','w') as create:
            create.write(f'''vlan database
vlan 20,40,50,999
exit''')
    s+=1
print("GOD")
print("completed",Save)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.02.2020, 11:37
Ответы с готовыми решениями:

list index out of range
Друзья, решая задачу столкнулся с проблемой в виде данной ошибки list index out of range import math def main(x, z, y): ...

list index out of range
В общем появилась ошибка, d = try: with open('text.txt') as fileH: for line in fileH: ...

list index out of range
Почему возникает ошибка list index out of range? (17 строка) N, T = map(int, input().split()) A = B = for i in range(N): ...

16
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
19.02.2020, 13:54
52 строка. Там 13, а всего 12, скорее всего надо переставить на 12.
0
0 / 0 / 0
Регистрация: 19.02.2020
Сообщений: 7
19.02.2020, 14:49  [ТС]
там всего 15 столбцов, проблема в 14 строке
Во вложении скрин ошибки
Миниатюры
Цикл (list index out of range)  
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
19.02.2020, 14:57
Цитата Сообщение от vano288 Посмотреть сообщение
там всего 15 столбцов,
Выведите print(sheet.row_values(s)) и посмотрите что там и сколько.
Тогда не нужно будет гадать на кофейной гуще.
0
0 / 0 / 0
Регистрация: 19.02.2020
Сообщений: 7
19.02.2020, 15:03  [ТС]
Ребята, в файле 15 столбцов, я не гадаю
Прикладываю еще 2 скрина. При указании конкретного числа, код выполняется
При использовании переменной в качестве числа, не выполняется.
Миниатюры
Цикл (list index out of range)   Цикл (list index out of range)  
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
19.02.2020, 15:06
Цитата Сообщение от vano288 Посмотреть сообщение
в файле 15 столбцов
Нам это неочевидно. Интепретатору - тем более, раз он несогласен с этим.

Добавлено через 1 минуту
Где вывод sheet.row_values(s)?
0
0 / 0 / 0
Регистрация: 19.02.2020
Сообщений: 7
19.02.2020, 15:10  [ТС]
Пробовал сделал вывод, на скрине видно что выдает ошибку на print(sheet.row_values(s)[12])
Разве первое значение в sheet.row_values(s)[12] это не указание строки?
0
150 / 120 / 36
Регистрация: 01.11.2019
Сообщений: 425
19.02.2020, 15:20
А если нормально прописать, как в документации?
Python
1
sheet.row_values(s, start_colx=12, end_colx=12)
0
0 / 0 / 0
Регистрация: 19.02.2020
Сообщений: 7
19.02.2020, 15:30  [ТС]
прописал Unit=sheet.row_values(s,start_colx=12,en d_colx=12), все равно ошибка в этой строке
Миниатюры
Цикл (list index out of range)  
0
150 / 120 / 36
Регистрация: 01.11.2019
Сообщений: 425
19.02.2020, 15:39
print в цикл переместите
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
19.02.2020, 15:55
Цитата Сообщение от vano288 Посмотреть сообщение
Пробовал сделал вывод, на скрине видно что выдает ошибку на print(sheet.row_values(s)[12])
ОМГ.
Python
1
print(sheet.row_values(s))
а не
Python
1
print(sheet.row_values(s)[12])
0
150 / 120 / 36
Регистрация: 01.11.2019
Сообщений: 425
19.02.2020, 16:08
Тут скорее всего количество заполненных строк меньше чем количество итераций. Надо print в цикл переместить, тогда видно будет на какой итерации вылетает ошибка
1
0 / 0 / 0
Регистрация: 19.02.2020
Сообщений: 7
19.02.2020, 16:20  [ТС]
Цитата Сообщение от Garry Galler Посмотреть сообщение
Сообщение от vano288
Пробовал сделал вывод, на скрине видно что выдает ошибку на print(sheet.row_values(s)[12])
ОМГ.
PythonВыделить код
1
print(sheet.row_values(s))
а не
PythonВыделить код
1
print(sheet.row_values(s)[12])
Та же ошибка

Цитата Сообщение от volkomorov Посмотреть сообщение
Тут скорее всего количество заполненных строк меньше чем количество итераций. Надо print в цикл переместить, тогда видно будет на какой итерации вылетает ошибка
__________________
Да, это так. тренируюсь на одной строке, впоследствии их будет до 100. Это можем влиять на работу цикла?

Добавлено через 4 минуты
Еще информация, эта ошибка отсутствовала в коде, где путь я задавал руками, без easygui.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Exel=input("Введите путь файл EXEL в формате C:\\Users\\User\\Desktop\\test.xlsx:")
Save=input("Введите путь до папки сохранения в формате C:\\Users\\User\\Desktop\\:")
file=xlrd.open_workbook(f'{Exel}')
sheet=file.sheet_by_index(0)
s=1
while s<=100:
    Unit=sheet.row_values(s)[12]
    if Unit==2:
        nameFile=sheet.row_values(s)[1]
        create=open(f'{Save}{nameFile}.txt','w')
        VLAN=int(sheet.row_values(s)[2])
        RouterID=sheet.row_values(s)[3]
        RouterID=ipaddress.ip_address(f'{RouterID}')
        intVlan=sheet.row_values(s)[4]
        intVlan=ipaddress.ip_address(f'{intVlan}')
        MASK=sheet.row_values(s)[5]
        VIDEO=sheet.row_values(s)[6]
        TELEM=sheet.row_values(s)[7]
        MANAGEMENT=sheet.row_values(s)[8]
        uplink=int(sheet.row_values(s)[9])
        Camera=int(sheet.row_values(s)[10])
        area=sheet.row_values(s)[11]
        area=ipaddress.ip_address(f'{area}')
        with open(f'{Save}{nameFile}.txt','w') as create:
            create.write(f'''vlan database
Тут цикл выполняется и создает нужные мне файлы пока есть значения в ячейках, потом прерывается ошибкой и выходит из цикла(при отсутствии значений)
0
150 / 120 / 36
Регистрация: 01.11.2019
Сообщений: 425
19.02.2020, 16:25
добавьте еще несколько строк в файл, перенесите print(s) в цикл и поймете. Насколько помню считываются только строки в которых хоть одна ячейка заполнена

Добавлено через 3 минуты
попробуйте
Python
1
while s<=sheet.nrows
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
19.02.2020, 16:28
Цитата Сообщение от vano288 Посмотреть сообщение
Та же ошибка
Я не об этом просил. Вывод покажи sheet.row_values(s). А не ошибку. Вы-вод. При выводе без попытки взять индекс ошибки не будет.

Добавлено через 52 секунды
Цитата Сообщение от vano288 Посмотреть сообщение
while s<=100:
И вообще что за ересь использовать цикл while вместо for?
0
0 / 0 / 0
Регистрация: 19.02.2020
Сообщений: 7
19.02.2020, 16:29  [ТС]
Ребята, нашел ошибку в своем коде. На индекс можно забить(в рамках моих знаний), был пропущен слеш в указании пути сохранения файла, теперь файлы создаются до тех пор пока есть значения в я чейках.

Всем спасибо за помощь!
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
19.02.2020, 16:42
Вот человеческий код для обхода строк и столбцов
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
sheet = rb.sheet_by_index(0)
for rownum in range(sheet.nrows):
    row = sheet.row_values(rownum)
    print(row) # вся строка
    print(row[0]) # вывод по индексу
    print(row[:3]) # вывод среза строки: 0,1,2 столбец
    # перебор строки 
    for c_el in row:
        print(c_el)
 
# обход по столбцам
for colnum in range(sheet.ncols):
    column = sheet.col_values(colnum)
    columnn = column[1:] # срез от колонки
    print(columnn)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.02.2020, 16:42
Помогаю со студенческими работами здесь

list index out of range
На Stepik не проходит проверку. Хоть в среде все работает. Помогите. s =list(map(int,input().split())) n = 1 a = 0 b = -1 c = 0 ...

IndexError: list index out of range
помогите, пожалуйста. в 25 и 32 строчках выдаёт ошибку: IndexError: list index out of range def numbers_factory(number): s = ...

IndexError: list index out of range
Кто знает как исправить? Ошибка на 3 строке IndexError: list index out of range import sys import math a = float(sys.argv) b =...

list index out of range ошибка
Задача:Даны действительные числа а1 . . . , а 50. Получить «сглаженные» значения а1 . . . , а50, заменив в исходной последовательности...

Ошибка list index out of range
word, s, k, a, save = input(), , 0, , for t in range(len(word)): s.append(word) save = s for i in range(int(input())): ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита, которое может. . .
Команды "Заполнить" и "Очистить" на форме документа
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". На примере нетипового документа разработанного в конфигурации КА2. В качестве источника данных указан регистр накопления, в который записываются данные о. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru