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

Eel中urllib请求函数向JS返回null但Python端有值的问题

解决Eel中Python函数返回bytes导致JS端获取null的问题

我明白你遇到的困扰了——Python里直接调用python_function()能正常拿到HTML字节流,但通过Eel传给JS就变成了null,反而返回普通字符串时JS能正常接收。这其实和阻塞逻辑没关系,核心问题出在返回值的类型上!

问题根源

urllib.request.urlopen().read()返回的是字节(bytes)类型数据,而Eel在Python与JS之间传递数据时,默认不支持直接传递字节对象,会把无法序列化的类型转为null。你在Python里用print()的时候,Python会自动把bytes解码成字符串输出,所以看起来正常,但返回给Eel的时候就出现了序列化问题。

解决方案

只需要把bytes数据解码成字符串再返回即可。你可以用decode()方法指定编码(通常HTML用utf-8,也可以根据响应头的编码调整),修改后的Python代码如下:

import eel, urllib.request

@eel.expose
def python_function():
    response = urllib.request.urlopen('http://google.com').read()
    # 将字节解码为字符串,这里用utf-8,可根据实际编码调整
    return response.decode('utf-8')

eel.init('web')
eel.start('index.html', port=0)

你的JS代码不需要修改,保持原来的异步调用方式就可以:

async function jsFunction() {
    let result = await eel.python_function()();
    return result;
}

这样调整后,JS就能正常获取到HTML字符串了。

另外补充个小提示:如果后续再遇到类似返回值在JS端变成null的情况,先检查Python函数的返回类型——Eel只支持传递JSON可序列化的类型(字符串、数字、列表、字典等),像bytes、自定义类这类无法序列化的类型,都会被转为null。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 12:37:44