为+:'int'和'str'获取错误不支持的操作数类型

时间:2014-09-09 04:35:38

标签: python ironpython

我有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

我尝试了很多其他选项,但仍然是同样的错误。

2 个答案:

答案 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 )