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

为何使用Python.Runtime会出现“cannot unpack”错误,IronPython却正常?

解决Python.Runtime调用socket.create_connection时的拆包异常

问题原因

使用Python.Runtime调用socket.create_connection时,传入的C# ValueTuple<string, int>无法被Python识别为可迭代的元组类型,导致拆包操作失败,抛出'cannot unpack non-iterable ValueTuple[String,Int32] object'异常。而IronPython会自动完成.NET类型到Python类型的映射,因此不会出现该问题。

解决方案

需要将C#的元组显式转换为Python的元组对象,使用PyTuple.Create方法创建符合Python要求的元组后再传入函数。

修正后的代码

Runtime.PythonDLL = "python38.dll";
PythonEngine.Initialize();

dynamic socketModule = Py.Import("socket");
// 将C#元组转换为Python元组
var pythonAddrTuple = PyTuple.Create("127.0.0.1", 30001);
dynamic clientSocket = socketModule.create_connection(pythonAddrTuple);

补充说明

Python.Runtime作为CPython与.NET的交互层,不会自动将所有.NET类型隐式转换为Python类型,对于元组、列表这类需要迭代的类型,必须显式调用对应的Python类型构造方法(如PyTuple.Create、PyList.Create)来完成类型转换,确保Python函数能正确处理参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 05:02:03