首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >静音music21警告

静音music21警告
EN

Stack Overflow用户
提问于 2021-09-29 14:25:45
回答 2查看 159关注 0票数 2

我收到了大量关于零持续时间和弦的music21警告:

代码语言:javascript
复制
WARNING: midi chord with zero duration will be treated as grace

我尝试用以下代码覆盖music21.environment.Environment()上的warn方法:

代码语言:javascript
复制
def silence(*args, **kwargs): pass
e = music21.environment.Environment()
setattr(e, 'warn', silence)

我还尝试将所有警告设置为静音:

代码语言:javascript
复制
import warnings
warnings.filterwarnings('ignore')

这两个国家都没有成功。如何从music21中静音这些(或者理想情况下是所有)警告?(我验证我的数据后处理。)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-09-29 22:50:36

尝试:

代码语言:javascript
复制
>>> from music21 import midi  # or your standard import
>>> def noop(input):
...   pass
... 
>>> midi.translate.environLocal.warn = noop

我们正在跟踪一个现代化请求,将警告系统转移到https://github.com/cuthbertLab/music21/issues/254的python警告模块,以便您可以按习惯用法进行过滤。您在这里介绍的案例比IMO上的原始案例更紧迫,因此我将留下评论。

票数 2
EN

Stack Overflow用户

发布于 2021-09-29 17:02:28

如果你使用的是ipython,你可以试着静音你想要执行的部分:

代码语言:javascript
复制
from IPython.utils import io

with io.capture_output():
    < ...your code... >

否则,在源代码(~/Lib/site-packages/music21)中,您可以导航到midi/transate.py,并使用注释块或类似的东西调整第585-6行以禁用警告。

第三个选项可能是创建一个上下文管理器来静音打印,类似于io.capture_output()函数:

代码语言:javascript
复制
import io
import sys

class MuteWarn:
    def __enter__(self):
        self._init_stdout = sys.stdout
        sys.stdout = open(os.devnull, "w")
    
    def __exit__(self, exc_type, exc_val, exc_tb):
        sys.stdout.close()
        sys.stdout = self._init_stdout

with MuteWarn():
    < ...your code... >
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69378318

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档