运行Python SAX解析代码时遇TypeError:setDocumentLocator()缺必传参数
解决SAX解析时的TypeError: setDocumentLocator()参数缺失问题
嘿,这个问题我之前也踩过坑!咱们先看报错的核心:TypeError: setDocumentLocator() missing 1 required positional argument: 'locator',原因其实很简单——你传给sax.parse的是类本身,而不是类的实例。
问题出在哪?
SAX解析器需要的是一个ContentHandler的实例对象来处理XML事件,但你写的是:
sax.parse(sys.stdin, MySaxHandler)
这里的MySaxHandler是类,不是实例。当SAX尝试调用它的setDocumentLocator方法时,这个方法是实例方法,默认第一个参数是self,但此时没有实例,所以框架只传了locator参数,导致参数不匹配,就抛出了这个错误。
修改方案
只需要给MySaxHandler加上括号,创建一个实例传给sax.parse就行:
#!/usr/bin/env python from xml import sax import sys class MySaxHandler(sax.ContentHandler, object): def startElement(self, name, attrs): print(name, attrs) if __name__ == '__main__': # 这里加括号创建实例 sax.parse(sys.stdin, MySaxHandler())
额外说明
在Python中,实例方法必须通过类的实例来调用。如果直接用类调用实例方法,你得手动把实例作为第一个参数传进去,但SAX框架不会帮你做这件事,所以必须传入已经实例化好的对象。
内容的提问来源于stack exchange,提问作者d33tah
相关产品推荐
相关产品推荐

