ValueError:在 midi 中找不到子字符串
Posted
技术标签:
【中文标题】ValueError:在 midi 中找不到子字符串【英文标题】:ValueError: substring not found in midi 【发布时间】:2020-03-07 23:54:15 【问题描述】:让我首先声明我是编码的初学者,我尝试解决这个问题的尝试受到了限制。我正在尝试关注这个Arduino controlled piano robot。它需要一个文本化的 midi 文件并使用 python 将其转换为 8 位。代码附在链接底部附近,我放在这里时遇到了一些格式问题。
This link 到使用的文本化 MIDI 文件。在运行代码之前,我将 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】: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
【讨论】:
试过了,我收到了类似的错误消息 Traceback (最近一次调用最后一次): 'File "C:\Users\nby20\Downloads\python_code_for_translation (1).py",第 184 行,在 main() 文件“C:\Users\nby20\Downloads\python_code_for_translation (1).py”,第 12 行,在 main temp_time = time_finder(a) 文件“C:\Users\nby20\Downloads\python_code_for_translation (1) .py",第 161 行,在 time_finder time_end = in_string.index("") ValueError: substring not found' 现在似乎在空行上失败(它表示未找到空格字符)。因为就像每种类型的行都有一个空格一样,我不得不假设它在最后一行(这是一个空行)上崩溃了。老实说,您使用的这个脚本不是很干净/宽容,我只是在这里猜测。如果您希望其他人能够与您一起解决此问题,您可能应该有一些共享文件夹(具有恒定的公共链接),其中包含您正在运行的脚本、正在运行它的文件以及error.txt
具有当前错误状态的文件。以上是关于ValueError:在 midi 中找不到子字符串的主要内容,如果未能解决你的问题,请参考以下文章
ValueError:在 draco.apps.home.models 中找不到函数 url
pygraphviz ValueError:在路径中找不到程序点[重复]
不同长度的pandas groupby元组-ValueError:在通过级别中找不到值:MultiIndex