在Python2.7中STR类型未更改为INT

在Python2.7中STR类型未更改为INT,python,Python,我有一个剧本,我正在努力拼凑。它执行大量的数字洗牌等操作,记录本地机器上的资源利用率。我被剧本的一部分挂断了。我试图从字符串的一部分创建一个int。下面是脚本中有问题的部分 j = item[11:len(item)] if j.endswith("L"): j = int(j[0:len(j)-1]) print type(j) item是一个字符串,它是从一系列的字符串切片/拆分中获得的。在这种情况下,项将等于类似于此的内容——“bytes_recv=3829381938203L”

我有一个剧本,我正在努力拼凑。它执行大量的数字洗牌等操作,记录本地机器上的资源利用率。我被剧本的一部分挂断了。我试图从字符串的一部分创建一个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()将其设置为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='s代码行中收到了这个错误。

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

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

问题可能是,如果
j
不是以
的“L”结尾,就不能将其转换为
int

当我使用
item='bytes\u recv=3829381938203L'
运行脚本时,它工作正常,
j
是一个
int
,但是如果使用
item='bytes\u recv=1302'
,则不会执行if块中的代码,因此不会执行任何转换

如果使用
long()

j = long(j[0:len(j)])

问题可能在于,如果
j
不是以
“L”
结尾,则不会将其转换为
int

当我使用
item='bytes\u recv=3829381938203L'
运行脚本时,它工作正常,
j
是一个
int
,但是如果使用
item='bytes\u recv=1302'
,则不会执行if块中的代码,因此不会执行任何转换

如果使用
long()

j = long(j[0:len(j)])


@0xhughes从字符串自动类型转换是个坏主意——这是使PHP容易出错的众多因素之一。所以我被告知int不是一个神奇的int生成器,而自动类型转换是个坏主意。我很欣赏这些信息,但是你们两位好绅士怎么建议我考虑这些代码行?@ 0xHuges只是把它转换成<代码> int >代码>,使用<代码> int >代码>,就像你做左操作数。哦,我查错了你的答案。我以为你在说使用int()不会神奇地将我的类型转换为int,而且ndic[nds]。。。我减法的部分也是一个字符串。我现在明白了,您的意思是python不会神奇地将我的ndic[nds]部分转换为int类型。谢谢你的信息@Marcin:)@Marcin我从没想过会这样。这就是为什么我在代码中到处乱动int()。我认为在正确的位置使用它是我的问题。@0xhughes从字符串自动类型转换是个坏主意——这是PHP容易出错的众多因素之一。所以我被告知int不是一个神奇的int生成器,而自动类型转换是个坏主意。我很欣赏这些信息,但是你们两位好绅士怎么建议我考虑这些代码行?@ 0xHuges只是把它转换成<代码> int >代码>,使用<代码> int >代码>,就像你做左操作数。哦,我查错了你的答案。我以为你在说使用int()不会神奇地将我的类型转换为int,而且ndic[nds]。。。我减法的部分也是一个字符串。我现在明白了,您的意思是python不会神奇地将我的ndic[nds]部分转换为int类型。谢谢你的信息@Marcin:)@Marcin我从没想过会这样。这就是为什么我在代码中到处乱动int()。在正确的地方使用它是我的问题,我相信。同意。作为一种习惯,我倾向于考虑所有逻辑上的可能性并明确地处理它们,因此没有任何东西被忽略。这意味着更多的代码行,但也意味着没有处理的事情的模糊性更少。这不是导致异常的原因,因为他确实在进行减法的行上调用了
int(j)
。这是提供的最接近的答案,为我指出了正确的方向,我没有在需要的时候将j变量转换成int,只是在我切掉L的时候。我只是在if语句之后添加了一行j=int(j),并在执行减法的行中声明了j上的int,结果成功了!只是一些简单的事情,我需要被推到正确的方向,感谢@omz和interjay的推送。这是错误的
int(j)
正在返回一个int-如果不是,它将引发异常。此外,错误消息中提到的类型遵循操作数的顺序-因为
str
是第二个提到的,因此
-
运算符的右侧操作数是
str
。在进行数学运算时,长类型和int是否能很好地发挥作用?同意。作为一种习惯,我倾向于考虑所有逻辑上的可能性并明确地处理它们,因此没有任何东西被忽略。这意味着更多的代码行,但也意味着没有处理的事情的模糊性更少