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

通过Eel从Python调用JavaScript函数失败,报AttributeError错误

问题分析与解决

你遇到的AttributeError: module 'eel' has no attribute 'say_hello_js'并非版本兼容问题,核心原因是Python代码在网页未完成加载时就尝试调用JS函数。

Eel的工作逻辑是:JS函数通过eel.expose()暴露给Python的前提是网页已经完成初始化并加载了eel.js,而你原代码中在eel.start()之前就调用eel.say_hello_js(),此时网页还未启动,Eel还未注册该JS函数,自然会抛出属性不存在的错误。

修复方案

方案1:使用eel.start()的回调函数

将调用JS函数的逻辑放到页面启动完成后的回调里,确保网页已加载:

import eel

# Set web files folder
eel.init('web')

@eel.expose                         # Expose this function to Javascript
def say_hello_py(x):
    print('Hello from %s' % x)

say_hello_py('Python World!')

def on_page_started():
    # 页面加载完成后调用JS函数
    eel.say_hello_js('Python World!')

eel.start('hello.html', size=(300, 200), callback=on_page_started)  # Start

方案2:非阻塞启动后延迟调用

如果需要在启动后执行额外逻辑,可以用block=False让eel.start()不阻塞,延迟一段时间后再调用JS函数:

import eel
import time

eel.init('web')

@eel.expose
def say_hello_py(x):
    print('Hello from %s' % x)

say_hello_py('Python World!')

# 非阻塞启动页面
eel.start('hello.html', size=(300, 200), block=False)
# 给页面加载留足够时间(根据实际情况调整)
time.sleep(1)
# 调用JS函数
eel.say_hello_js('Python World!')

# 保持程序运行
while True:
    eel.sleep(1)

验证兼容性

Python 3.8.10与最新版本的Eel完全兼容,你遇到的问题和版本无关,只需调整代码执行时机即可解决。

内容的提问来源于stack exchange,提问作者Tim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 07:31:06