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

Vigenere python - 找不到子字符串错误

在 .gitmodules 中找不到路径“LibTecho”的子模块映射

python中的re.search()函数找不到子字符串