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
相关产品推荐
相关产品推荐

