使用Eel调用Python回调函数时触发TypeError错误求助
解决Eel调用Python无参函数时的TypeError问题
问题场景
在Windows 11系统的Python 3.12.1虚拟环境中,使用Eel框架结合python-vlc实现音频播放功能,暴露了无参Python函数get_song_current_time用于获取当前播放时长,但通过JavaScript调用时触发TypeError,提示函数无需参数却传入了1个。
错误原因
你使用的Eel版本为0.16.0,该版本已切换为Promise风格的调用方式。旧版本中直接传递回调函数的写法,在新版本里会被当作参数传递给Python的无参函数,导致参数不匹配,触发错误。
修复方案
提供两种可行的修复方式,推荐使用第一种符合现代JS规范的Promise写法:
方式1:使用Promise风格调用(推荐)
修改JavaScript代码,通过async/await或.then()处理Python函数的返回值:
const currentTime = document.getElementById("current_time_display"); let currentTimeValue = 0; // 用async/await实现 async function updateCurrentTime() { currentTimeValue = await eel.get_song_current_time()(); console.log(currentTimeValue); // 同步更新DOM显示播放时长 currentTime.textContent = currentTimeValue; } updateCurrentTime(); // 或用.then()链式调用 eel.get_song_current_time()().then(result => { currentTimeValue = result; console.log(currentTimeValue); currentTime.textContent = result; });
方式2:修改Python函数支持回调
如果需要保留原有的回调写法,可以在Python函数中添加一个回调参数,主动调用回调返回结果:
import vlc import eel audio_file = "D:\\TheGreatMusicFolder\\VeryStupidSong.mp3" # 补全文件路径赋值 song = vlc.MediaPlayer(audio_file) song.play() @eel.expose def get_song_current_time(callback): # 调用JS传入的回调函数返回播放时长 callback(song.get_time())
此时原JavaScript代码无需修改即可正常运行。
验证说明
两种方式都能解决参数不匹配的问题,实现获取当前音频播放时长的功能。第一种方式更符合前端开发的主流规范,建议优先采用。
内容的提问来源于stack exchange,提问作者KaminariKatt
相关产品推荐
相关产品推荐

