0

我有一个我正在尝试拼凑的脚本。它做了很多数字洗牌等等,它记录了本地机器上的资源利用率。我被脚本的一部分挂断了。我正在尝试从字符串的一部分创建一个 int 。这是脚本的有问题的部分......

j = item[11:len(item)]
if j.endswith("L"):
    j = int(j[0:len(j)-1])
print type(j)

item 是从一长串字符串切片/拆分中获得的字符串。在这种情况下,item 将与此类似 - “bytes_recv=3829381938203L”或“bytes_recv=1302”。这四行将修剪非十进制字符,然后删除尾随 L(如果有的话),然后打印变量 J 的类型,由于我的代码中的第三行,它在我的脑海中应该是一个整数,它将它设置为int 与 int()。当我运行脚本时,它总是告诉我 j 变量类型是“str”。这使得我的脚本在遇到下一行代码时会自行抛出,

sndf = int(((float(int(j) - ndic[nds][len(ndic[nds])-1])/1024)/1024))

ndic 字典包含来自资源监控的数据点的运行列表,供以后用于绘图。那行代码从字典键的列表中取出最后一个条目,然后从我们的 j 值中减去它,然后将总数除以 1024,两次。我不认为上面的代码行会导致错误,但可能是我将其包含在内。这是我执行脚本时遇到的错误,

TypeError: unsupported operand type(s) for -: 'int' and 'str'

我在 sndf = 的代码行上收到该错误。

4

2 回答 2

3

Python 不会神奇地转换类型。ndic[nds][len(ndic[nds])-1]也是一个字符串。

于 2013-06-27T15:19:04.000 回答
2

问题可能是j如果int它不以"L".

当我使用 运行您的脚本时item = 'bytes_recv=3829381938203L',它可以正常工作,并且j是一个int,但是使用 时item = 'bytes_recv=1302',if 块中的代码不会被执行,因此不会进行任何转换。

如果你使用long()而不是int(),你实际上可以离开"L"那里,甚至不需要if语句:

j = long(j[0:len(j)])
于 2013-06-27T15:22:24.200 回答