ValueError: подстрока не найдена в midi - PullRequest
0 голосов
/ 08 марта 2020

Позвольте мне сначала начать с заявления, что я начинающий программист, и мои попытки исправить это были ограничены. Я пытаюсь следовать этому управляемому Arduino пианистическому роботу . Он берет текстовый MIDI-файл и использует python, чтобы перевести его в 8-битный. Код прикреплен внизу ссылки, у меня возникли некоторые проблемы с форматированием при размещении здесь.

Эта ссылка на используемый текстовый миди-файл. перед запуском кода я изменил input_file = open на путь к текстовому файлу, например,

input_file = open("C:\\Users\\nby20\\Downloads\\megalovania.txt") 

После запуска кода я получаю текстовый выходной файл, как и ожидалось, однако он пуст и я получаю несколько ошибок:

Traceback (most recent call last):
File "C:\Users\nby20\Downloads\python_code_for_translation.py", line 184, in <module>
   main()
File "C:\Users\nby20\Downloads\python_code_for_translation.py", line 23, in main
   result[-1] = str(temp_time) + "," + set_bit_prev(on_off_finder(a), note_finder(a), -1)
File "C:\Users\nby20\Downloads\python_code_for_translation.py", line 178, in on_off_finder
   end = in_string.index("ch=") - 1

ValueError: substring not found

Любые предложения о том, как это исправить, будут с благодарностью.

1 Ответ

2 голосов
/ 08 марта 2020

Traceback подобен отладочной информации, которую вы можете использовать для отслеживания того, какие функции были вызваны при возникновении ошибки. Кажется, ошибка произошла, когда он выполнял этот бит условной логики c, строки 22-23, функции main:

elif time_finder_comm(result[-1]) == temp_time:
    result[-1] = str(temp_time) + "," + set_bit_prev(on_off_finder(a), note_finder(a), -1)

, которая вызвала функцию on_off_finder, которая просто пытается Выясните, имеет ли строка «Вкл.» или «Выкл.».

Кажется, программа чтения файлов ожидает только такие строки:

55248 Off ch=10 n=40 v=64

Однако в загруженном файле также есть такие строки:

55248 Meta TrkEnd
TrkEnd

Функция index выдает ValueError: substring not found, если переданная подстрока не существует в строке, которая в данном случае (строка 178 ниже) является строкой "ch":

end = in_string.index("ch=") - 1

Попробуйте удалить такие строки и перезапустить скрипт? Найдите все строки с помощью «Trk» и удалите их, или создайте 3 отдельных файла, потому что в «megalovania.txt», кажется, есть 3 блока строк, которые запутают сценарий:

(starting at line 2469):
55248 Meta TrkEnd
TrkEnd
MTrk

...
(starting at line 4071):
58368 Meta TrkEnd
TrkEnd
MTrk

...
(starting at line 6431):
55296 Meta TrkEnd
TrkEnd
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...