Почему это AttributeError?
Я очень плохо знаком с Python и пытался использовать хорошую библиотеку ( audiotools) для воспроизведения плейлиста в формате mp3, просто как упражнение.
Это класс для воспроизведения треклиста (в общем, на основе ЭТОГО, как только я обнаружил, что есть "функция обратного вызова без аргументов, которая вызывается игроком, когда текущий трек закончен" (*)):
class Trackplay:
def __init__(self,
track_list,
audio_output=audiotools.player.open_output('ALSA'),
replay_gain=audiotools.player.RG_NO_REPLAYGAIN):
self.track_index = INDEX - 1
self.track_list = track_list
self.player = audiotools.player.Player(
audio_output,
replay_gain,
self.next_track())
def next_track(self):
try:
self.track_index += 1
current_track = self.track_list[self.track_index]
print str(current_track)
audio_file = audiotools.open(current_track)
self.player.open(audio_file) # <---------- error
self.player.play()
except IndexError:
print('playing finished')
Тогда я звоню:
tp = Trackplay(get_track_list(PATH))
где get_track_list
метод, возвращающий список mp3-файлов из каталога PATH
,
Ошибка, которую я получаю (в строке, отмеченной комментарием "error"):
AttributeError: Экземпляр Trackplay не имеет атрибута "player"
Я не понимаю, что происходит... но читаю все AttributeError
вопросы здесь, должно быть, что-то глупо...
player
мне кажется точно Trackplay
атрибут. Другие атрибуты, как track_index
а также track_list
кажется нормально, так как линия print str(current_track)
печатает текущий трек.
Спасибо за любую помощь.
1 ответ
Смотрите этот код здесь?
self.player = audiotools.player.Player(
audio_output,
replay_gain,
self.next_track())
В рамках создания Player
вы собираетесь назначить self.player
, ты звонишь self.next_track()
, self.next_track
пытается использоватьself.player
, до self.player
существует!
def next_track(self):
try:
self.track_index += 1
current_track = self.track_list[self.track_index]
print str(current_track)
audio_file = audiotools.open(current_track)
self.player.open(audio_file)
self.player.play()
except IndexError:
print('playing finished')
next_track
даже ничего не возвращает, поэтому сбивает с толку, почему вы пытаетесь пройти self.next_track()
в качестве аргумента Player
,
Это должен был быть обратный звонок? Если это так, вы должны пройти self.next_track
в Player
не называя это.
self.player = audiotools.player.Player(
audio_output,
replay_gain,
self.next_track)
# ^ no call parentheses