在Python 2.7中STR类型不会更改为INT

时间:2013-06-27 15:16:37

标签: python

我有一个脚本,我正在拼凑。它有很多数字改组等等,它记录了本地机器上的资源利用率。我挂了部分脚本。我试图从字符串的一部分创建一个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 with 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 =的代码行上收到了这个错误。

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

问题可能是,如果j没有以int结尾,则不会将"L"转换为item = 'bytes_recv=3829381938203L'

当我使用j运行您的脚本时,它运行正常,intitem = 'bytes_recv=1302',但long(),if块中的代码未执行,所以没有进行转换。

如果您使用int()代替"L",您实际上可以将if留在那里,甚至不需要j = long(j[0:len(j)]) 声明:

{{1}}