Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python lxml etree cleanup_名称空间返回None而不是cleanued树_Python_Python 3.x_Lxml - Fatal编程技术网

Python lxml etree cleanup_名称空间返回None而不是cleanued树

Python lxml etree cleanup_名称空间返回None而不是cleanued树,python,python-3.x,lxml,Python,Python 3.x,Lxml,我写了一个小类,用于抓取文件夹中包含一些文档的网页,所有这些都托管在S3上。我将响应转换为一个XML树,需要在其中清除前缀URL中的每个元素 以下是代码和问题: 导入请求 从lxml导入etree 类刮刀(): def_uuuinit_uuuu(self、BASE_URL、headers): self.BASE\u URL=BASE\u URL self.headers=标题 self.URL=self.BASE_URL+'?分隔符=/' def清洁_根(自身,根): “需要清除每个XML元素前

我写了一个小类,用于抓取文件夹中包含一些文档的网页,所有这些都托管在S3上。我将响应转换为一个XML树,需要在其中清除前缀URL中的每个元素

以下是代码和问题:

导入请求
从lxml导入etree
类刮刀():
def_uuuinit_uuuu(self、BASE_URL、headers):
self.BASE\u URL=BASE\u URL
self.headers=标题
self.URL=self.BASE_URL+'?分隔符=/'
def清洁_根(自身,根):
“需要清除每个XML元素前面的URL前缀”
对于root.getiterator()中的元素:
elem.tag=etree.QName(elem.localname)
返回etree.cleanup\u名称空间(根)
def get_根目录_文件夹_名称(自身):
“检索文件夹”
res=requests.get(self.URL,headers=self.headers)
root=etree.XML(res.content)
print(f“{root}”)#prints:“root:”
print(f“{self.clean_root(root)}”)#在必须打印的地方打印:“无”
叫它:

myInstance=scraper(基本URL,标题)
myInstance.get_root_folder_names()
如果我从
get\u root\u folder\u names
函数调用
clean\u tree(root)
,结果是
None
,就好像从未应用过一样。但是
root
确实存在于调用此函数之前,因为它被正确打印。我从这里得到启发:

我做错了什么


我还尝试在不使用self的情况下使用
clean\u root
函数。但是,当我从
get\u root\u folder\u names
函数调用它时,我得到了
NameError:name'clean\u tree'没有定义

问题实际上不是从其他函数调用函数。把纯函数和有副作用的函数混淆了

该函数返回
None
。它修改树,而不是创建一个新树(这就像初学者经常遇到的
list.sort
)问题一样)

clean_root
函数的结尾更改为:

etree.cleanup_namespaces(root)
return root

问题并不在于从其他函数调用函数。把纯函数和有副作用的函数混淆了

该函数返回
None
。它修改树,而不是创建一个新树(这就像初学者经常遇到的
list.sort
)问题一样)

clean_root
函数的结尾更改为:

etree.cleanup_namespaces(root)
return root

术语是“刮”术语是“刮”啊,我像个初学者一样被困住了D感谢您以清晰简洁的方式指出这一点!发生在每个人身上,文档中没有明确说明!我有预感,但必须检查源代码以确认。啊,我像一个初学者一样被困住了!:D感谢您以清晰简洁的方式指出这一点!发生在每个人身上,文档中没有明确说明!我有预感,但必须检查源代码以确认。