Moja aplikacja ma niestandardową bibliotekę audio, która sama używa biblioteki BASS.Śledzenie ignorowanego wyjątku w Pythonie?
Tworzę i niszczę obiekty strumienia BASS w całym programie.
Kiedy moi program wychodzi, losowo (I nie zorientowali się jeszcze wzorzec) pojawia się następujący komunikat na mojej konsoli:
Exception TypeError: "'NoneType' object is not callable" in <bound method stream.__del__ of <audio.audio_player.stream object at 0xaeda2f0>> ignored
moja biblioteka dźwięku (audio/audio_player.py [klasa Stream]) zawiera klasę, która tworzy obiekt strumienia BASS, a następnie umożliwia manipulowanie nim przez kod. Gdy klasa zostanie zniszczona (w procedurze del), wywołuje funkcję BASS_StreamFree w celu wyczyszczenia dowolnych zasobów przydzielonych przez 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..
Moim pierwszym skojarzeniem na podstawie tej wiadomości jest to, że gdzieś w moim kodu, wystąpienie mojej klasie strumień jest osierocony (już przypisana do zmiennej) i nadal Python próbuje zadzwonić do funkcji del, gdy aplikacja się zamyka, ale do czasu, gdy spróbuje, obiekt zniknął.
Ta aplikacja używa wxWidgets i tym samym wiąże się z niektórymi wątkami. Fakt, że nie otrzymuję rzeczywistej nazwy zmiennej, pozwala mi uwierzyć w to, co napisałem w poprzednim akapicie.
Nie jestem pewien, jaki kod byłby odpowiedni do debugowania tego. Wiadomość wydaje się nieszkodliwa, ale nie podoba mi się pomysł "ignorowanego" wyjątku w ostatecznym kodzie produkcyjnym.
Czy są jakieś wskazówki, które ktoś ma do debugowania tego?
"wxWidgets" Uh, och, oczekuj, że rzeczy odejdą, kiedy nie będziesz tego oczekiwał, chyba że wykonasz więcej pracy. –