我可以在不尝试关闭文件的情况下从wave.open()引发问题吗?

时间:2020-09-04 16:52:53

标签: python wave

我有一些产生音频的代码,有时由于不同的原因而产生声音。我想将生成的音频直接写入到wav文件中。但是,由于通过wave位于with上下文中,wave试图关闭文件。现在,如果在过程的后期进行就可以了,但是如果是一开始,wave并没有设置任何参数,并且死亡。

这是MWE:

from io import BytesIO
import wave

audio_out = BytesIO() 
with wave.open(audio_out, "w") as file_out:
    raise Exception('aaa!') 

Error: # channels not specified

我能想到的最好的办法是,在任何更改都没有引起变化之前,在最顶部包含file_out.setparams((1, 1, 1, 1, 'NONE', '')),然后在有了真实参数的情况下覆盖它们。不过,感觉有点脏。有更好的解决方案吗?谢谢!

想法:删除上下文管理器

我尝试删除上下文管理器:

file_out = wave.open(audio_out, "w")
raise Exception('aaa!')

但是wave仍然无条件关闭文件。文档实际上提到了这一点:Wave_write.close(): Make sure nframes is correct, and close the file if it was opened by wave. This method is called upon object collection. [...]因此,在这种情况下发生的是,我得到了一个打印输出,上面写着Exception ignored in: <bound method Wave_write.__del__ of <wave.Wave_write object at 0x7ff549064eb8>> [...] wave.Error: # channels not specified,仍然不令人满意。

0 个答案:

没有答案
相关问题