我有Windows窗体应用程序在哪里,我将DataTable
从C#传递到IronPython
。
但是在运行python脚本时,它会给出错误
+:'int'和'str'的不支持的操作数类型。
我搜索了很多,但找不到我的剧本中的错误。
-------- C#代码--------
DataTable mytable = new DataTable();
mytable = MainTable.Copy();
// Column "TimeStamp" is of typeof(int)
var engine = Python.CreateEngine();
ScriptScope scope = engine.CreateScope();
scope.SetVariable("mytable", mytable);
ScriptSource ss = engine.CreateScriptSourceFromString(
txtPythonCode.Text.Trim(), SourceCodeKind.Statements);
ss.Execute(scope);
----------- Pyhton脚本-------
import clr
clr.AddReference('System.Data')
from System import Data
from System.Data import DataTable
for row in mytable.Rows:
row["TimeStamp"] = row["TimeStamp"] + 1
我尝试了很多其他选项,但仍然是同样的错误。
答案 0 :(得分:1)
通过访问字典"TimeStamp"
上的密钥row
引用的值是一个字符串。因此错误。替换
row["TimeStamp"] = row["TimeStamp"] + 1
带
row["TimeStamp"] = int(row["TimeStamp"]) + 1
答案 1 :(得分:1)
这是因为你试图使用带有str和int的+运算符。检查一下:
>>> "012" + "345"
'012345'
>>> 1 + 1
2
>>> 1 + "012"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'
因此,为避免引发异常,您可以将其中一个转换为str或int:
>>> 1 + int("012")
13
所以,在你的情况下,我会这样做:
row["TimeStamp"] = str( int(row["TimeStamp"]) + 1 )