1

我正在使用 1850 O'Neills Folksong 语料库,因为它来自于 music21 语料库。我需要遍历所有歌曲。

我尝试使用以下代码

songs = corpus.getComposer('oneills1850')
for ruta in songs:
    op = converter.parse(ruta)
    numbers = op.getNumbers()

...然后迭代数字。在大多数情况下,每个op变量都是一个 Opus 对象,它的每个数字都与一个分数相关联。

问题是这并不总是正确的。例如,第 15 个元素songs(即索引 14)是一个 Score 对象本身,而不是 Opus。所以我的代码在尝试使用 getNumbers 时崩溃。

我想,解决方案应该事先检查是否op是 Opus(在这种情况下使用 getNumbers,就像我之前所做的那样)或 Score(在这种情况下跳过第二次迭代部分)。但我找不到如何做到这一点,或任何其他解决我问题的方法。

4

1 回答 1

1

如果您必须在调用方法之前确定对象的类型,请使用isinstance

if isinstance(op,Opus):
于 2019-01-16T15:59:00.313 回答