0 / 0 / 0 Регистрация: 02.12.2014 Сообщений: 14 |
|
1 |
|
05.12.2014, 14:00. Показов 1618. Ответов 2
Проект полностью компилирует! Но при выборе любого пункта меню выдает ошибку (Смотреть скриншот) Изображения
0 |
260 / 192 / 60 Регистрация: 12.05.2013 Сообщений: 857 |
|
05.12.2014, 14:06 |
2 |
Ваш цикл выходит за границы. Проверяйте циклы.
0 |
gunslinger случайный прохожий 2401 / 1614 / 554 Регистрация: 20.07.2013 Сообщений: 4,535 |
||||
05.12.2014, 15:38 |
3 |
|||
Решение
0 |
Hello.
After the latest update, I started to get these errors. Mostly it’s «Menu Index Out Of Range», but sometimes it’s «Access violation at address…». You can see them on the screenshots.
I was wondering when exactly it happens and found out that it appears after I click «Save».
I recorded the video to demonstrate the problem.
As you can see, when I’m saving the project to a new file, no error appears. Only when I’m saving to the same file. It doesn’t matter which folder to save to.
You can also observe that FL Studio becomes completely unusable after this error. Please, can you help me with this?
UPD: I got interesting observations. It happens only when I’m in the Plugins menu (mixer or generators). And the error appears only in case I go to the Plugins menu right after I clicked «Save». If I go to some other menu even for a second (edit, tools, etc) after saving, and then go to the Plugins menu, there is no error then. So really strange to me.
You do not have the required permissions to view the files attached to this post.
Topic: MENU Index out of range (Read 13704 times)
Hello, I keep on getting the error message «Menu index is out of range.» After clicking the OK button twice it goes away… that is until I make another selection. This started two-days ago. It is so annoying please help!
This happends after I start URL Snooper and receive a link(s). No matter where on the URL Snooper page I click with my mouse the error Menu index out of range comes up. I have to click OK twice for it to go away and to access the link. Immediately I am done with the selected link and try to select another link the same error occurs.
So in summary, before I can get the blue highlight for the Index-Link-Protocol Line, the error message occurs and I have to press the OK button on the error message twice for me to get the blue highlight in order to Right-Mouse-Click and get the options to Copy, Select or Launch the URL.
can you check something for me?
check the Websites menu in url snooper, and on the Options tab, check the list of entries in the bottom table (the one with columns «Menu Text» and «System Command».
here are what mine look like to give you an idea:
Mouser,
Your screen shot allowed me to solve the problem.
I had requested that GetASFStream be used to capture the video files after URL Snooper had determined their URLs. I unchecked it from the Options Link and added it again. Now all is well.
Can now run GetASFStream and WMPlayer from URL Snooper to assist me with video capture and video playback.
Thanks you for the Blessing.
great — your clue might be what i need to figure out why url snooper was giving that error, i’ll see if i can reproduce it by fooling around with those options.
Hi,
I have the same error. I have tried several times the ideas given above but I failed to find a solution for now. Any idea?
Thanks in advance,
Jity
I also have the problem and I found solution.
In my case i was unable to close the program. The problem occured only afer pressing Sniff Network
than «Manu Index out of Range» also during interface detection.
I figured out that when i start the program and i will change manually interface (in my case to Microsoft adpater) and i cloese snopoer and agian start snooper and i wil change for my real network interface and i will close snooper i can fix the problem.
Problem has something to do with interface manu
Суть этой ошибки очень проста — попытка обратиться к элементу списка/массива с несуществующим индексом.
Пример:
lst = [1, 2, 3]
print(lst[3])
вывод:
----> 2 print(lst[3])
IndexError: list index out of range
Указанный в примере список имеет три элемента. Индексация в Python начинается с 0
и заканчивается n-1
, где n
— число элементов списка (AKA длина списка).
Соответственно для списка lst
валидными индексами являются: 0
, 1
и 2
.
В Python также имеется возможность индексации от конца списка. В этом случае используются отрицательные индексы: -1
— последний элемент, -2
— второй с конца элемент, …, -n-1
— второй с начала, -n
— первый с начала.
Т.е. если указать отрицательный индекс, значение которого превышает длину списка мы получим всё ту же ошибку:
In [2]: lst[-4]
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-2-ad46a138c96e> in <module>
----> 1 lst[-4]
IndexError: list index out of range
В реальной жизни (коде) эта ошибку чаще всего возникает в следующих ситуациях:
- если список пустой:
lst = []; first = lst[0]
- в циклах — когда переменная итерирования (по индексам) дополнительно изменяется или когда используются глобальные переменные
- в циклах при использовании вложенных списков — когда перепутаны индексы строк и столбцов
- в циклах при использовании вложенных списков — когда размерности вложенных списков неодинаковые и код этого не учитывает. Пример:
data = [[1,2,3], [4,5], [6,7,8]]
— если попытаться обратиться к элементу с индексом2
во втором списке ([4,5]
) мы получимIndexError
- в циклах — при изменении длины списка в момент итерирования по нему. Классический пример — попытка удаления элементов списка при итерировании по нему.
Поиск и устранения ошибки начинать нужно всегда с того, чтобы внимательно прочитать сообщение об ошибке (error traceback
).
Пример скрипта (test.py
), в котором переменная итерирования цикла for <variable>
изменяется (так делать нельзя):
lst = [1,2,3]
res = []
for i in range(len(lst)):
i += 1 # <--- НЕ ИЗМЕНЯЙТЕ переменную итерирования!
res.append(lst[i] ** 2)
Ошибка:
Traceback (most recent call last):
File "test.py", line 6, in <module>
res.append(lst[i] ** 2)
IndexError: list index out of range
Обратите внимание что в сообщении об ошибке указан номер ошибочной строки кода — File "test.py", line 6
и сама строка, вызвавшая ошибку: res.append(lst[i] ** 2)
. Опять же в реальном коде ошибка часто возникает в функциях, которые вызываются из других функций/модулей/классов. Python покажет в сообщении об ошибке весь стек вызовов — это здорово помогает при отладке кода в больших проектах.
После этого — мы точно знаем в каком месте кода возникает ошибка и можем добавить в код отладочную информацию, например напечатать значения индекса, который вызвал ошибку, понять почему используется неправильный индекс и исправить ошибку.
Ситуация: у нас есть проект, в котором мы математически моделируем игру в рулетку. Мы хотим обработать отдельно нечётные числа, которые есть на рулетке, — для этого нам нужно выбросить из списка все чётные. Проверка простая: если число делится на 2 без остатка — оно чётное и его можно удалить. Для этого пишем такой код:
# в рулетке — 36 чисел, не считая зеро
numbers = [n for n in range(36)]
# перебираем все числа по очереди
for i in range(len(numbers)):
# если текущее число делится на 2 без остатка
if numbers[i] % 2 == 0:
# то убираем его из списка
del numbers[i]
Но при запуске компьютер выдаёт ошибку:
❌ IndexError: list index out of range
Почему так произошло, ведь мы всё сделали правильно?
Что это значит: компьютер на старте цикла получает и запоминает одну длину списка с числами, а во время выполнения эта длина меняется. Компьютер, держа в памяти старую длину, пытается обратиться по номерам к тем элементам, которых уже нет в списке.
Когда встречается: когда программа одновременно использует список как основу для цикла и тут же в цикле добавляет или удаляет элементы списка.
В нашем примере случилось вот что:
- Мы объявили список из чисел от 1 до 36.
- Организовали цикл, который зависит от длины списка и на первом шаге получает его размер.
- Внутри цикла проверяем на чётность, и если чётное — удаляем число из списка.
- Фактический размер списка меняется, а цикл держит в голове старый размер, который больше.
- Когда мы по старой длине списка обращаемся к очередному элементу, то выясняется, что список закончился и обращаться уже не к чему.
- Компьютер останавливается и выводит ошибку.
Что делать с ошибкой IndexError: list index out of range
Основное правило такое: не нужно в цикле изменять элементы списка, если список используется для организации этого же цикла.
Если нужно обработать список, то результаты можно складывать в новую переменную, например так:
# в рулетке — 36 чисел, не считая зеро
numbers = [n for n in range(36)]
# новый список для нечётных чисел
new_numbers = []
# перебираем все числа по очереди
for i in range(len(numbers)):
# если текущее число не делится на 2 без остатка
if numbers[i] % 2 != 0:
# то добавляем его в новый список
new_numbers.append(numbers[i])
Вёрстка:
Кирилл Климентьев