为什么Python会在循环中途崩溃?TypeError:\uu getitem__

为什么Python会在循环中途崩溃?TypeError:\uu getitem__,python,python-2.7,loops,nonetype,Python,Python 2.7,Loops,Nonetype,目标 我有一个包含65个.txt文件的目录,我正在逐个解析它,并将输出保存到65个相应的.txt文件中。然后我计划将它们连接起来,但我不确定直接跳到这一步是否有助于找到解决方案 问题 我收到: TypeError:“非类型”对象没有属性“getitem” 我们看到了两条相似的线索: 然而,我的问题似乎有点奇怪,因为它确实设法检查输入文件,解析它们并编写输出文件大约十次,在这一点上我得到了错误。这些文件都是相似的,只是来自网站的HTML源代码(也就是说,同一个网站,只是它的不同页面,以及相同的

目标

我有一个包含65个.txt文件的目录,我正在逐个解析它,并将输出保存到65个相应的.txt文件中。然后我计划将它们连接起来,但我不确定直接跳到这一步是否有助于找到解决方案

问题

我收到:

TypeError:“非类型”对象没有属性“getitem

我们看到了两条相似的线索:

然而,我的问题似乎有点奇怪,因为它确实设法检查输入文件,解析它们并编写输出文件大约十次,在这一点上我得到了错误。这些文件都是相似的,只是来自网站的HTML源代码(也就是说,同一个网站,只是它的不同页面,以及相同的基本HTML结构)

这是发生错误的函数;在这段代码的最后一行:

def parse(elTree):
    desired_value = elTree.xpath('my_very_long_xpath')
    desired_value = [x.get('title')[8:] for x in desired_value]
我确实还有一些变体——我实际上在解析大约5到6个不同的
期望值。所有这些都只是在一个更大的循环中运行,在这个循环中,文件被读入
parse
函数,然后输出被写入一个新文件

我尝试过的

我已经删除了最初出现错误的文件,但在下一个文件中发生了相同的错误。我再次做了同样的操作,删除了两个文件,但仍然得到了那个错误

我在每个文件之间引入了
time.sleep(3)
,只是为了让事情运行得更平稳。我意识到整个过程可能有一个缓冲区,它可能正在被读取,它只是被擦除,所以那里没有文件。。。下面是
C
中循环中的一个类似示例。不幸的是,3秒钟的睡眠(加上随后分散在其他各个点上)对我没有帮助。代码在完全相同的点失败

根据,当函数应用于类型不合适的对象时,会出现
TypeError
,那么在正确运行10或11次之后,它怎么会发生呢? 下面是关于
\uuuu getitem\uuuu
方法的更多官方信息

由于代码在其他方面工作得很好,我没有包括其余的部分,但是如果有人怀疑它可能来自其他地方,有充分的理由,那么我将添加更多的代码

我已经检查了.txt文件的内容,检查了那些有效的文件和那些失败的文件,XPath在这两个文件中都有效,内容在那里可以找到并解析


我在同一个文件的30个副本上使用了该代码,该文件执行成功,因此HTML代码中肯定存在细微差异,我的解析器无法识别。

TypeError:“NoneType”对象没有属性“\uuu getitem\uuuuuuuuu”
表示您试图使用某种索引,如
mylist[2]
,在
None
上,而不是在
列表上。这意味着对该对象的
\uuu getitem\uuu
的内部调用失败,因为
None
类型为
Nonetype
的对象没有为其定义这样的方法

问题出在
x.get('title')[8:
get()
方法在
x
中未找到任何名为
'title'
的键,因此它返回
。但是,您可以尝试使用
[8://code>对其进行切片。如果它返回了一个
列表
或类似的对象,它就可以正常工作,但是
None
就不行了

我建议引入某种错误处理:

try:
    desired_value = [x.get('title')[8:] for x in desired_value]
except TypeError:
    return
您必须更正并扩展此存根,使其以适合您的程序的方式运行。您可能需要定义某种默认值来代替
return
语句。

x.get('title')
正在返回
None

如果要过滤列表理解,而不重复查询,则可以从查询结果生成单个项目列表,并在其
时进行过滤:

desired_value = [title[8:] for x in desired_value
                 for title in [x.get('title')]
                 if title]

x.get('title')
正在返回
None
是,这似乎是标准的回答,从我提供的三个链接中可以看出。问题是为什么,当它已经设法通过了65个文件中的10个左右?它似乎并不依赖于实际的文件,正如我在我的文章中也提到的那样。为了扩展@PeterWood所说的内容,
get
方法正在寻找一个
title
属性,而输入数据可能没有它。这不是python的问题——您需要弄清楚您的所有数据是否与预期的一致,并相应地更新代码。捕获异常并打印它。查看
x
是什么。它将有一个与xpath匹配的元素,但没有属性
'title'
。我会试试看,然后再给你回复!我会试一试,然后再给你回复!