如何(自动)区分 Opus 和 Score 对象?

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


我尝试使用以下代码


songs = corpus.getComposer('oneills1850')

for ruta in songs:

    op = converter.parse(ruta)

    numbers = op.getNumbers()

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


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


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


撒科打诨
浏览 143回答 1
1回答

开满天机

如果在调用对象的方法之前必须确定对象的类型,请使用isinstance:if isinstance(op,Opus):
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python