You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 05:05:10