La mia app ha una libreria audio personalizzata che utilizza essa stessa la libreria BASS.Tracciare un'eccezione ignorata in Python?
Io creo e distruggo oggetti flusso BASS in tutto il programma.
Quando le mie uscite del programma, in modo casuale (non ho ancora capito il motivo) ottengo il seguente avviso sulla mia console:
Exception TypeError: "'NoneType' object is not callable" in <bound method stream.__del__ of <audio.audio_player.stream object at 0xaeda2f0>> ignored
Biblioteca audio (audio/audio_player.py [classe Stream]) contiene una classe che crea un oggetto flusso BASS e quindi consente al codice di manipolarlo. Quando la classe viene distrutta (nella routine del) chiama BASS_StreamFree per cancellare tutte le risorse che BASS potrebbe aver assegnato.
(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..
La mia prima inclinazione in base a questo messaggio è che da qualche parte nel mio codice, un'istanza della mia classe flusso è orfano (non più assegnato a una variabile) e Python ancora sta cercando di chiamare la sua funzione del quando l'app si chiude, ma nel momento in cui tenta l'oggetto è andato via.
Questa app utilizza wxWidgets e pertanto implica alcune operazioni di threading. Il fatto che non mi venga assegnato un nome variabile effettivo mi porta a credere a ciò che ho affermato nel paragrafo precedente.
Non sono sicuro di quale codice sarebbe rilevante per eseguire il debug di questo. Il messaggio sembra innocuo, ma non mi piace l'idea di un'eccezione "ignorata" nel codice di produzione finale.
C'è qualche suggerimento che qualcuno ha per eseguire il debug di questo?
"wxWidgets" Uh oh, aspettati che le cose vadano via quando non te l'aspetti, a meno che tu non lavori di più. –