我目前正在尝试使播放列表函数在我的代码的后台运行。我使用线程和pygame,播放列表是一个数组列表。我一直收到这个错误:
Exception in thread Thread-4:
Traceback (most recent call last):
File "C:\Users\harry\AppData\Local\Programs\Python\Python38\lib\threading.py", line 932, in
_bootstrap_inner
self.run()
File "C:\Users\harry\AppData\Local\Programs\Python\Python38\lib\threading.py", line 870, in run
self._target(*self._args, **self._kwargs)
TypeError: 'str' object is not callable下面是相关的代码片段:
from threading import Thread
from time import sleep
def playPlaylist(playlist):
mixer.init()
for music in playlist:
mixer.music.load(music)
mixer.music.play()
while mixer.music.get_busy():
sleep(1)
Thread(target=playPlaylist, args=(playlist)).start()Github仓库:https://github.com/M1st3rMinecraft/python-virtual-assistant
发布于 2020-09-17 02:57:10
尝试将Thread(target=playPlaylist, args=(playlist)).start()更改为Thread(target=playPlaylist, args=(playlist, )).start()它对我的情况很有帮助。如果不是字符串,还要检查调用函数的代码中的所有元素。如果这不起作用,请将您的文件与mixer类共享,这样我就可以进一步帮助您。
发布于 2020-09-17 03:33:39
args参数应该是一个iterable (比如元组或列表),其中每个元素都成为函数playPlayList的参数。指定args=(playlist)时,playlist周围的圆括号不表示一个元素的元组。为此,您需要指定args=(playlist,)。因此,playlist本身被解释为可迭代的,并且它的每个元素都将被视为playPlayList的单独参数。playlist中当前必须只有一个元素,如果有,例如3个,您将得到如下错误消息:
TypeError: playPlaylist() takes 1 positional argument but 3 were given因此需要指定:args=(playlist,)。这是第一个问题。
由于不再向您传递playlist,而是该列表中的第一个也是唯一一个元素作为参数,这可能会导致第二个错误。但我认为您会在以下位置获得例外:
for music in playlist:但也许playlist的第一个元素本身就是可迭代的。不过,尝试修复第一个问题,看看会发生什么。
https://stackoverflow.com/questions/63925986
复制相似问题