类型错误:+ 不支持的操作数类型:“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】:您可能打算从每个<comment>
中获取<count>
子元素的值并将它们加在一起?如果是这样,那么对 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' 不支持的操作数类型