我有一个剧本要拼。它做了很多数字洗牌之类的事情,它记录本地机器上的资源利用率。我对剧本的一部分很感兴趣。我试图从字符串的一部分创建一个int。下面是脚本中有问题的部分。。。你知道吗
j = item[11:len(item)]
if j.endswith("L"):
j = int(j[0:len(j)-1])
print type(j)
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字典包含来自资源监视的正在运行的数据点列表,以便在以后的绘图中使用。这行代码是从dictionary键的列表中取最后一个条目,然后从j值中减去它,再除以1024,两次。我不认为上面的代码行是导致错误的原因,但可能是因为我包含了它。这是我执行脚本时遇到的错误
TypeError: unsupported operand type(s) for -: 'int' and 'str'
我在sndf='s代码行上收到了这个错误。你知道吗
Python不会神奇地转换类型。
ndic[nds][len(ndic[nds])-1]
也是一个字符串。你知道吗问题可能是,如果
j
没有以"L"
结尾,就不能将它转换成int
。你知道吗当我用
item = 'bytes_recv=3829381938203L'
运行脚本时,它运行得很好,j
是一个int
,但是用item = 'bytes_recv=1302'
,if块中的代码不会执行,因此不会进行转换。你知道吗如果使用
long()
而不是int()
,实际上可以将"L"
留在那里,甚至不需要if
语句:相关问题 更多 >
编程相关推荐