FAQ > 金融建模 > 第三方交互 > Python

Q:python调天软函数参数传递失败,结果返回为空?    

  • A:在python交互中,通过RemoteCallFunc调天软模型,在传递数组参数时,会出现失败情况。
    问题重现案例:
    有天软函数

    Function TestFunCall(a);//a定义为一个数据表格类型
    Begin
      return a;
    end;

    python中调用

    import sys
    sys.path.append('C:\Program Files\Tinysoft\Analyse.NET')
    import TSLPy3 as ts
    a={43131.0:100,43160.0:200}
    data = ts.RemoteCallFunc("TestFunCall", [a],{})
    print(data)

    python中打印结果为:(0, [], None)

    原因是:天软数组下标只支持整数与字符串,所以,当传入非整型的实数的下标结构数据时,会导致失败。

    解决办法:
    方式一:不改模型,改数据:改变数据下标数据类型,将实数下标转换成整型下标,即可传递成功

    import sys
    sys.path.append('C:\Program Files\Tinysoft\Analyse.NET')
    import TSLPy3 as ts
    a={43131:100,43160:200}
    data = ts.RemoteCallFunc("TestFunCall", [a],{})
    print(data)

    python中打印结果为:(0, {43160: 200, 43131: 100}, None)
    方式二:不改数据,改模型:将python中的结构数据转化为json串后,传进天软函数中后,再调用importjsonstring解析json串即可,该种方式可支持各种复杂的数据类型的传递。
    注:当需要天软传数据进python时,也可通过json串,解决一些编码问题,具体可参考:FAQ:Q:在天软将结果转换成Json串返回到python中解决转码引起的效率低下问题
    修改天软模型为:

    Function TestFunCall(a);//a定义为一个数据表格类型
    Begin
      return importjsonstring(a);
    end;

    python中实现更改为:

    import sys
    sys.path.append('C:\Program Files\Tinysoft\Analyse.NET')
    import TSLPy3 as ts
    import json
    a={43131:100,43160:200}
    b=json.dumps(a)
    data = ts.RemoteCallFunc("TestFunCall", [b],{})
    print(data)

    python中打印结果为:(0, {b'43131': 100, b'43160': 200}, None)
    注意:此时的下标为字符串型,而非整型