You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:07:14