类型错误:+ 不支持的操作数类型:“int”和“元素”

Posted

技术标签:

【中文标题】类型错误:+ 不支持的操作数类型:“int”和“元素”【英文标题】:TypeError: unsupported operand type(s) for +: 'int' and 'Element' 【发布时间】:2015-12-20 16:18:48 【问题描述】:

美好的一天 每当我尝试运行下面的 python 脚本时,我都会收到错误消息。它假设给出从 XML 文件中提取的值的总和。 错误消息是: 类型错误:+ 的不支持的操作数类型:'int' 和 'Element'

我已经尝试了所有选项,但错误仍然出现。我哪里错了?

源文件:

<commentinfo>
<comments>
<comment>
<name>TDK</name>
<count>5000</count>
</comment>
<comment>
<name>Swats</name>
<count>420</count>
</comment>
<comment>
<name>Tandwa</name>
<count>2000</count>
</comment>
</comments>
</commentinfo>

Python 代码:

import urllib
import re
import xml.etree.ElementTree as ET
u = urllib.urlopen('file.xml')
data = u.read()
print 'Retrieved',len(data),'characters'
tree = ET.fromstring(data)
lst = tree.findall('comments/comment')
print 'Value', len(lst)
score=[]
for item in lst:
    number=int(item)
    score.append(number)
    total=int(sum(score))
print 'Sum', total

错误信息:

Traceback (most recent call last):
  File "test.py", line 12, in <module>
    number=int(item)
TypeError: int() argument must be a string or a number, not 'Element'

【问题讨论】:

什么是n?它没有在您的代码中定义。 lst 也没有定义。 我敢打赌 OP 打算使用 number 而不是 n,但谁知道... 程序如下: 刚刚编辑了代码。谢谢列夫 【参考方案1】:

每个“项目”都是 XML 元素的问题:

如果我修改代码如下,你可以看到错误:

...
score = []
for item in lst:
    print(item)
    number = int(item)
    score.append(number)
    total = int(sum(score))
...

当它运行时,我们会在引发错误之前进行第一次运行。

<Element 'comment' at 0x7f9da76584a8>

XML 元素不是“整数”或可以转换为整数的字符串。我们需要获取项目的数据,然后将其转换为整数。 “comment”元素仍然是“count”元素的父元素,所以我们想要“count”元素的文本

假设我们有我们的树,我们可以按如下方式获取所有计数元素:

lst = tree.findall('comments/comment/count')

然后我们可以使用元素文本中的 int() 内置函数获取值:

# this is a generator expression, it tells the code how to run but doesn't do it yet
scores = (int(i.text) for i in lst)

然后,我们可以评估总数:

total = sum(scores)

总代码(加载打开文件作为数据读取后)如下:

print('Retrieved', len(data), 'characters')

tree = ET.fromstring(data)
lst = tree.findall('comments/comment/count')
print('Value', len(lst))

scores = (int(i.text) for i in lst)
total = sum(scores)
print('Sum', total)

我们得到的结果是:

Retrieved 230 characters
Value 3
Sum 7420

【讨论】:

Waal,在我绞尽脑汁 2 天之后,终于解决了。我已经测试了这些 cmets 中建议的所有解决方案,并且一切正常。谢谢大家的回复。从建议的解决方案中,我意识到我的问题在于识别有问题的元素。 如果我们中的任何一个人帮助了您并回答了您的问题,请将问题标记为已回答。很高兴能提供帮助。【参考方案2】:

您可能打算从每个&lt;comment&gt; 中获取&lt;count&gt; 子元素的值并将它们加在一起?如果是这样,那么对 for 循环进行以下轻微修改就足够了:

score = []
for item in lst:
    number = int(item.find("count").text)
    score.append(number)
total = sum(score)
print 'Sum', total

【讨论】:

或者score = [int(item.find("count").text) for item in lst]

以上是关于类型错误:+ 不支持的操作数类型:“int”和“元素”的主要内容,如果未能解决你的问题,请参考以下文章

Keras 报告类型错误:+ 的不支持的操作数类型:'NoneType' 和 'int'

求和函数概率类型错误:+ 不支持的操作数类型:“int”和“str”

代码错误Python:TypeError:/:'set'和'int'不支持的操作数类型

TypeError: *: 'int' 和 'NoneType' 不支持的操作数类型

+= 不支持的操作数类型:“int”和“datetime.timedelta”

TypeError: 不支持的操作数类型 -: 'int' 和 'list'