使用Chaquopy从Java向Python传值时报null错误,如何正确打印传入的Halo参数?
报错原因
你现在遇到的空值报错和Java侧的传值代码没有关系,问题完全出在Python代码的逻辑上:
- 写在Python文件最外层的
print(a()),会在Chaquopy加载Python模块的瞬间直接执行。这时候Java侧还没走到调用a函数传"Halo"的步骤,你直接无参调用需要必填words参数的a函数,自然会报参数缺失的空值错误。 - 你把“本地测试函数”的代码和“跨语言调用的接收逻辑”混在了一起:Java通过
callAttr触发a函数时,才会把"Halo"作为参数传进函数,外层的自动执行逻辑根本碰不到Java传来的值。
正确的Python端实现
直接删掉最外层的无参调用print(a()),把接收、打印传值的逻辑全部放到a函数内部就行:
def a(words): # 这里的words就是Java传过来的"Halo",可直接做后续处理 print("收到Java传入的内容:", words) # 处理后的结果可以直接return回Java侧 return words
传值验证
Python端改完之后,原有的Java代码不需要做任何调整:
- 当Java执行
pyf.callAttr("a", "Halo")时,会自动触发Python函数内部的打印逻辑,正确输出收到的"Halo"内容 - 也可以在Java侧打印Python函数的返回值做双向校验:
Log.d("ChaquopyTest", "Python返回的内容:" + obj.toString());
内容的提问来源于stack exchange,提问作者Boon Jin Sheng
相关产品推荐
相关产品推荐

