导入数学在IronPython中失败

时间:2014-03-04 11:21:23

标签: c# math ironpython

我正在尝试在C#中使用IronPython日志功能。想法是用户会写一个数学脚本,这将被评估,答案将显示在UI中。当我使用这种方法进行简单的数学运算(加法,减法等)时,它可以正常工作。当我需要使用日志功能时,我尝试导入数学模块失败。我的代码是:

public double Calculate(string script)
{
    ScriptEngine engine = Python.CreateEngine();
    ScriptSource source = engine.CreateScriptSourceFromString("import math" + System.Environment.NewLine + script, SourceCodeKind.AutoDetect);
    return source.Execute<double>();
}

当我运行此代码时,我得到异常'IronPython.Runtime.Exceptions.ImportException否模块名为math . I am calling method as Calculate(“math.log(10)”)`

我错过了任何导入或dll吗?

2 个答案:

答案 0 :(得分:2)

Python区分大小写,并且没有名为Math的类..仅System.Math

为了得到你想要的东西,你需要使用这个导入语句:from System import Mathimport System.Math as Math

两者都会得到相同的结果......

答案 1 :(得分:2)

我试图复制你的问题,但是我还没有安装IronPython,所以我从here安装了最新的稳定版本(2.7.4)。我不确定你是否使用相同的版本...

创建解决方案时,我知道我需要添加一些引用。我的猜测是,这是你的邪恶的来源。

我添加了引用'IronPython''Microsoft.Scripting',它们随IronPython的安装一起提供。确切的版本是v4.0.30319(IronPython和Microsoft Scripting)。

所以我的Windows窗体应用程序有一个textBox和一个按钮(它毕竟只是一个测试),我复制了你的示例方法,名为Calculate,以确保我们有相同的,这是我的版本:

 public double Calculate(string script)
 {
   ScriptEngine engine = Python.CreateEngine();
   ScriptSource source = engine.CreateScriptSourceFromString("import math" + Environment.NewLine + script, Microsoft.Scripting.SourceCodeKind.AutoDetect);
   return source.Execute<double>();
 }

在我的按钮的事件处理程序中,我放置了以下代码:

private void button1_Click(object sender, EventArgs e)
{
  try
  {
    double outcome = Calculate("math.log(10)");
    tbOutcome.Text = string.Format("Outcome of log(10): {0}", outcome);
  }
  catch (Exception ex)
  {
    MessageBox.Show(ex.Message, "Error occured...", MessageBoxButtons.OK, MessageBoxIcon.Error);
  }
}

执行我的应用程序时,程序不会显示错误,但它会显示我在计算log(10)时所期望的结果(假设您正在计算自然对数)。我的textBox包含:

Outcome of log(10): 2,30258509299405

所以只有一个提示,试着找出你是否安装了不同版本的ScriptEngine(我知道还有一些不仅仅是Microsoft.Scripting)并查看引用你的解决方案。

希望它有所帮助!