为什么我的代码只解析XML文件的一部分?

2024-06-17 02:40:04 发布

您现在位置:Python中文网/ 问答频道 /正文

提前道歉我是Python的新手。 我试图对这个XML文件中的所有元素求和,但由于某种原因,我的代码似乎只是对文件的一部分求和。 我想弄清楚,但失败了。我可以请教你一些建议吗?谢谢。 抱歉,文件太长了

import xml.etree.ElementTree as ET

input='''
<commentinfo>
<note>This file contains the sample data for testing</note>
<comments>
<comment>
<name>Romina</name>
<count>97</count>
</comment>
<comment>
<name>Laurie</name>
<count>97</count>
</comment>
<comment>
<name>Bayli</name>
<count>90</count>
</comment>
<comment>
<name>Siyona</name>
<count>90</count>
</comment>
<comment>
<name>Taisha</name>
<count>88</count>
</comment>
<comment>
<name>Ameelia</name>
<count>87</count>
</comment>
<comment>
<name>Alanda</name>
<count>87</count>
</comment>
<comment>
<name>Prasheeta</name>
<count>80</count>
</comment>
<comment>
<name>Risa</name>
<count>79</count>
</comment>
<comment>
<name>Asif</name>
<count>79</count>
</comment>
<comment>
<name>Zi</name>
<count>78</count>
</comment>
<comment>
<name>Ediomi</name>
<count>76</count>
</comment>
<comment>
<name>Danyil</name>
<count>76</count>
</comment>
<comment>
<name>Barry</name>
<count>72</count>
</comment>
<comment>
<count>64</count>
<name>Lance</name>
<count>72</count>
</comment>
<comment>
<name>Hattie</name>
<count>66</count>
</comment>
<comment>
<name>Mathu</name>
<count>66</count>
</comment>
<comment>
<name>Bowie</name>
<count>65</count>
</comment>
<comment>
<name>Samara</name>
<count>65</count>
</comment>
<comment>
<name>Uchenna</name>
</comment>
<comment>
<name>Shauni</name>
<count>61</count>
</comment>
<comment>
<name>Georgia</name>
<count>61</count>
</comment>
<comment>
<name>Rivan</name>
<count>59</count>
</comment>
<comment>
<name>Kenan</name>
<count>58</count>
</comment>
<comment>
<name>Isma</name>
<count>57</count>
</comment>
<comment>
<name>Hassan</name>
<count>57</count>
</comment>
<comment>
<name>Samanthalee</name>
<count>54</count>
</comment>
<comment>
<name>Alexa</name>
<count>51</count>
</comment>
<comment>
<name>Caine</name>
<count>49</count>
</comment>
<comment>
<name>Grady</name>
<count>47</count>
</comment>
<comment>
<name>Anne</name>
<count>40</count>
</comment>
<comment>
<name>Rihan</name>
<count>38</count>
</comment>
<comment>
<name>Alexei</name>
<count>37</count>
</comment>
<comment>
<name>Indie</name>
<count>36</count>
</comment>
<comment>
<name>Rhuairidh</name>
<count>36</count>
</comment>
<comment>
<name>Annoushka</name>
<count>32</count>
</comment>
<comment>
<name>Kenzi</name>
<count>25</count>
</comment>
<comment>
<name>Shahd</name>
<count>24</count>
</comment>
<comment>
<name>Irvine</name>
<count>22</count>
</comment>
<comment>
<name>Carys</name>
<count>21</count>
</comment>
<comment>
<name>Skye</name>
<count>19</count>
</comment>
<comment>
<name>Atiya</name>
<count>18</count>
</comment>
<comment>
<name>Rohan</name>
<count>18</count>
</comment>
<comment>
<name>Nuala</name>
<count>14</count>
</comment>
<comment>
<name>Carlo</name>
<count>12</count>
</comment>
<comment>
<name>Maram</name>
<count>12</count>
</comment>
<comment>
<name>Japleen</name>
<count>9</count>
</comment>
<comment>
<name>Breeanna</name>
<count>7</count>
</comment>
<comment>
<name>Zaaine</name>
<count>3</count>
</comment>
<comment>
<name>Inika</name>
<count>2</count>
</comment>
</comments>
</commentinfo>'''

tree = ET.fromstring(input)
counts = tree.findall('comments/comment')

summa=0
for item in counts:
    try:
        k=item.find('count').text
        k=int(k)
        print k
        summa +=k
    except:
        break

print summa

Tags: 文件nametreeforinputcountcommentitem
1条回答
网友
1楼 · 发布于 2024-06-17 02:40:04

其中一个<comment>标记没有<count>

<comment>
<name>Uchenna</name>
</comment>

这导致item.find('count')成为None。很明显,None没有.text属性,因此会引发AttributeError。您的广泛异常处理捕获AttributeError,并提前终止循环。你知道吗

这很好地说明了为什么您永远不应该使用:

try:
    ...
except:
    ...

您应该捕获您知道如何处理的异常(然后尽量将try套件中的代码保持最少)。在这种情况下:

for item in counts:
    try:
        k=item.find('count').text
        k=int(k)
    except (AttributeError, ValueError):  # missing or malformatted `<count>`.
        continue  # Skip that tag and keep on summing the others
    print k
    summa +=k

相关问题 更多 >