ValueError:找不到子字符串-初学者

问题描述 投票:0回答:1

首先让我说我是编码的完整初学者,而我修复此问题的尝试受到限制,请首先开始。我正在尝试跟随这个由Arduino控制的钢琴机器人https://www.hackster.io/MoKo/arduino-controlled-piano-robot-pibot-641a06。它需要一个文本化的midi文件,并使用python将其转换为8位。该代码附在链接底部附近,在将其放在此处时遇到一些格式问题。

https://drive.google.com/file/d/1L4I_PMUsozEScWa7koNAMLhHtN5BsDTu/view?usp=sharing是所使用的文本化​​midi文件的链接。在运行代码之前,我将input_file = open更改为文本文件路径,例如,input_file = open(“ C:\ Users \ nby20 \ Downloads \ megalovania.txt”)

运行代码后,我得到了预期的文本输出文件,但是它为空,并且出现了一些错误:

回溯(最近通话):

文件“ C:\ Users \ nby20 \ Downloads \ python_code_for_translation.py”,第184行,在main()

文件“ C:\ Users \ nby20 \ Downloads \ python_code_for_translation.py”,主行中的第23行结果[-1] = str(temp_time)+“,” + set_bit_prev(on_off_finder(a),note_finder(a),-1)

文件“ C:\ Users \ nby20 \ Downloads \ python_code_for_translation.py”,第178行,位于on_off_finder中结束= in_string.index(“ ch =”)-1

ValueError:找不到子字符串

关于解决此问题的任何建议将不胜感激。

python arduino midi
1个回答
0
投票

Traceback就像调试信息,您可以用来跟踪引发错误时调用了哪些函数。在执行main函数的条件逻辑的这一行(第22-23行)时,似乎发生了错误:

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
© www.soinside.com 2019 - 2024. All rights reserved.