gpt4 book ai didi

c# - 为什么从 C# 为 IronPython 脚本调用 CompiledCode.Execute 的行为不符合预期

转载 作者:行者123 更新时间:2023-11-30 17:14:58 25 4
gpt4 key购买 nike

我正在尝试从 C# (4.0) 调用 IronPython (2.7.1) 脚本

这与 IronPython integration in C#: a specific problem/question 有关

我在文件 script.py 中有一个如下所示的 python 脚本

import clr

def getStream(activity):
if activity.ActivityType == 'XXX':
if activity.Complexity == 'LOW':
return 1
else:
return 2
else:
return 0

getStream(activity)

我正在尝试预编译脚本并稍后重用

ScriptEngine engine = Python.CreateEngine();
ScriptSource source = engine.CreateScriptSourceFromFile("script.py");
CompiledCode compiledCode = source.Compile();
dynamic scope = engine.CreateScope();
// .. creating an activity object here
scope.SetVariable("activity", activity);

现在获取 streamId 如果我这样做是行不通的

int streamId = rule.Execute<int>(scope);

异常(exception)是
IronPython.Runtime.Exceptions.TypeErrorException 未被用户代码处理 Message=expected int, 得到 NoneType

但这会起作用

rule.Execute(scope);
int streamId = scope.getWorkstream(activity);

我的问题是调用 CompiledCode 类的 Execute 方法的正确用法是什么?

最佳答案

我相信Execute如果编译后的代码是一个表达式,而不是一系列语句,则只会返回一个值。在这种情况下,您的第二种用法是正确的。

如果代码只是“2 + 2”,那么 Execute<int>可能会起作用,但我目前无法检查。

关于c# - 为什么从 C# 为 IronPython 脚本调用 CompiledCode.Execute 的行为不符合预期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8307351/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com