我的应用程序有一个自定义音频库,它本身使用 BASS 库。
我在整个程序中创建和销毁 BASS 流对象。
当我的程序随机退出时(我还没有弄清楚模式),我在控制台上收到以下通知:
Exception TypeError: "'NoneType' object is not callable" in <bound method stream.__del__ of <audio.audio_player.stream object at 0xaeda2f0>> ignored
我的音频库(audio/audio_player.py [class Stream])包含一个创建 BASS 流对象并允许代码对其进行操作的类。当类被销毁时(在del例程中),它调用 BASS_StreamFree 来清除 BASS 可能分配的任何资源。
(audio_player.py)
from pybass import *
from ctypes import pointer, c_float, c_long, c_ulong, c_buffer
import os.path, time, threading
# initialize the BASS engine
BASS_Init(-1, 44100, 0, 0, None)
class stream(object):
"""Represents a single audio stream"""
def __init__(self, file):
# check for file existence
if (os.path.isfile(file) == False):
raise ValueError("File %s not found." % file)
# initialize a bass channel
self.cAddress = BASS_StreamCreateFile(False, file, 0, 0, 0)
def __del__(self):
BASS_StreamFree(self.cAddress)
def play(self):
BASS_ChannelPlay(self.cAddress, True)
while (self.playing == False):
pass
..more code..
基于此消息,我的第一个倾向是在我的代码中的某个地方,我的流类的一个实例被孤立(不再分配给变量)并且 Python 仍在尝试在应用程序关闭时调用它的del函数,但是到了时间它尝试对象已经消失。
这个应用程序确实使用 wxWidgets,因此涉及一些线程。没有给我一个实际的变量名这一事实让我相信我在上一段中所说的话。
我不确定究竟什么代码与调试相关。该消息似乎无害,但我不喜欢最终生产代码中“忽略”异常的想法。
有没有人有任何调试这个的提示?