这是显示Python作用域活动(版本3.6和目标x64)的图像:
Python作用域
主要问题是两个调用python方法之间的关系,第一个用于启动类对象,第二个用于访问该类的方法。这是第一个调用python属性的图像:
调用Python初始化方法
和getNumberPlusOne活动调用:
调用Python getNumberPlusOne方法
正在执行的python代码:
class ExampleClass:
def __init__(self,t,n):
self.text = t
self.number = n
def getNumberPlusOne(self):
return (self.number+1)
最后,执行第二个Invoke Python方法时出错:
一个ExceptionDetail,可能由IncludeExceptionDetailInFaults = true创建,其值为: System.InvalidOperationException:调用Python方法时出错----> System.Runtime.Serialization.InvalidDataContractException:类型'UiPath.Python.PythonObject'无法序列化。考虑使用DataContractAttribute属性标记它,并使用DataMemberAttribute属性标记要序列化的所有成员。如果类型是集合,请考虑使用CollectionDataContractAttribute对其进行标记。有关其他受支持的类型,请参见Microsoft .NET Framework文档。
关于错误在哪里以及如何与init方法中创建的输出对象进行交互的任何想法?
答案 0 :(得分:0)
我相信,此活动的设计初衷是考虑到简单的脚本,而不是针对整个类。 Here's在其社区论坛上的一篇文章中,用户Sergiu.Wittenberger进入了更多详细信息。
在我的情况下,局部变量“ pyScript”是指向python对象的指针,即ExampleClass
的实例。
现在,有一个“调用Python方法”活动-此活动使我们可以按名称调用方法。但是,似乎类上的方法是UiPath无法访问的-您不能只键入pyScript.MethodName()
。
因此,似乎我们无法访问类方法(请在这里证明我错了!),但是Sergio显示了一种解决方法。在您的情况下,您可以在类外添加另一个方法以访问或操作对象:
class ExampleClass:
def __init__(self,t,n):
self.text = t
self.number = n
def getNumberPlusOne(self):
return (self.number+1)
foo = ExampleClass("bar", 42)
def get_number_plus_one():
return foo.getNumberPlusOne()
请注意,这也意味着该对象在同一文件foo
中实例化。在这一点上,这似乎是与对象进行交互的唯一选择-再次,我希望有人能证明我做错了。