Ứng dụng của tôi có thư viện âm thanh tùy chỉnh tự sử dụng thư viện BASS.Truy tìm ngoại lệ bị bỏ qua trong Python?
Tôi tạo và hủy các đối tượng luồng BASS trong suốt chương trình.
Khi thoát chương trình của tôi, một cách ngẫu nhiên (Tôi đã không tìm ra mô hình nào) tôi nhận được thông báo sau trên giao diện điều khiển của tôi:
Exception TypeError: "'NoneType' object is not callable" in <bound method stream.__del__ of <audio.audio_player.stream object at 0xaeda2f0>> ignored
thư viện âm thanh của tôi (audio/audio_player.py [lớp Suối]) chứa một lớp tạo ra một đối tượng dòng BASS và sau đó cho phép mã thao tác nó. Khi lớp bị phá hủy (trong số del thường lệ), nó gọi BASS_StreamFree để xóa bất kỳ tài nguyên nào mà BASS có thể đã cấp phát.
(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..
nghiêng đầu tiên của tôi dựa trên thông điệp này là nơi nào đó trong mã của tôi, một thể hiện của lớp dòng của tôi đang được mồ côi (không còn được gán cho một biến) và Python vẫn đang cố gắng gọi hàm del của ứng dụng khi ứng dụng đóng, nhưng vào thời điểm nó cố gắng, đối tượng đã biến mất.
Ứng dụng này sử dụng wxWidgets và do đó liên quan đến một số luồng. Thực tế là tôi không được đưa ra một tên biến thực sự khiến tôi tin những gì tôi đã nói trong đoạn trước.
Tôi không chắc chắn chính xác mã nào sẽ liên quan đến gỡ lỗi này. Thông điệp dường như vô hại nhưng tôi không thích ý tưởng về một ngoại lệ "bị bỏ qua" trong mã sản xuất cuối cùng.
Có mẹo nào để gỡ lỗi này không?
"wxWidgets" Rất tiếc, mong đợi mọi thứ biến mất khi bạn không mong đợi điều đó trừ khi bạn làm việc nhiều hơn. –