西班牙
斯潘4
您好!@砂光机啊!
我在自定义转换器中使用listappender,它抛出python错误。这是一条信息:
include——无法计算python脚本“def paramfunc():返回fme掼macrovalues[fme掼macrovalues['listappender掼workspace掼name']+'u u掼append掼values']value=paramfunc()macroname=fme掼macrovalues['listappender掼workspace掼name']+'u append掼values掼wwjd'如果value==none:返回{macroname:value=6。文本类型(value)除了unicodedecodeerror:value=6。文本类型(value,'utf-8')返回{macroname:value}'程序终止转换失败。回溯(最近的最后一次调用):文件“,第5行,在mf_include_~文件中 “,第4行,paramfunc keyerror:u'$(test_workspace_name)_listappender_10_append_values'
当listappender在主画布上时没有问题。
好吧,惊喜…我就是这么做的!:)
我调查了一下,错误是@特纳拉德尼上面粘贴的实际上是由listappender中的脚本参数引发的。它是不由变压器内的蟒蛇引起。
listappender有一个名为append_values的已发布参数(它可以获取值列表),但是由于我希望用户能够使用特殊字符和空格,所以我希望此参数的值是wwjd编码的(使用类似xml的标记,例如空格被替换为
返回fme_宏值['append_values']
这工作正常,但当listappender嵌套在另一个自定义转换器中时,无法再找到已发布的参数。如技术问题所述@大卫在这里的注释中,很难获得参数的全名。
好消息是,我找到了一个解决方法,不管listappender嵌套在其他自定义变形金刚中有多深,它都能很好地工作。它也可以工作,不管名字是什么(例如当listappender重命名为listappender2)时。为了工作,listappender的私有参数append_values_wwjd中的代码应该变成:
context=fme_macrovalues.get('wb_current_context')对于key,fme_macrovalues.items()中的值:if key.endswith('append_values'):如果不是context或(context and key.startswith(context)):返回值return''
我会尽快将此应用到所有受影响的FME集线器变压器中。
当然,如果您想直接在pythoncaller中使用它,那么参数化代码并将其包装在自己的函数中是有意义的,例如:
def get_macro_value(param_name,default=none):context=fme_macrovalues.get('wb_current_context')for key,value in fme_macrovalues.items():if key.endswith(param_name):if not context或(context and key.startswith(context)):返回默认值
像这样,你可以打电话获取宏值()在自定义的transformer pythoncaller中的任何位置,并始终获得所需的值。找不到的时候,违约被退回(无如果未指定)。
如果是我,我会打电话给get_macro_value('附加值','')是的。这将从自定义转换器的已发布参数append_values中获取值,如果找不到,则返回空字符串。
希望这是清楚的…
编辑:以上仍然是一个权宜之计,请注意!例如,如果您有另一个名为more_append_values的已发布参数,则此值可以由上面的代码返回,具体取决于字典迭代中哪个键最先出现(对于python字典,这是相当随机的)。此外,参数名区分大小写。
?2019安全亚搏在线软件公司|法律