Jython和xml.sax解析器 - 奇怪的错误

时间:2011-02-23 20:07:09

标签: python xml jython sax

我刚刚开始使用Python / Jython和SAX解析器(xml.sax)。我写了一个简单的内容处理程序作为测试。

from __future__ import with_statement 

from xml.sax import make_parser, handler
from xml.sax.handler import ContentHandler

class CountingHandler(ContentHandler):

    def __init__(self):
        self.counter = 0

    def startElement(self, name, attrs):
        self.counter += 1

def main(argv=sys.argv):
    parser = make_parser()
    h = CountingHandler()
    parser.setContentHandler(h)
    with open(argv[1], "r") as input:
        parser.parse(input)

当我在某些文件(不是全部)上运行时,我收到错误:

Traceback (most recent call last):
  File "src/sciencenetworks/xmltools.py", line 93, in <module>
    sys.exit(main())
  File "src/sciencenetworks/xmltools.py", line 88, in main
    parser.parse(input)
  File "/amd.home/home/staudt/workspace/jython/Lib/xml/sax/drivers2/drv_javasax.py", line 141, in parse
    self._parser.parse(JyInputSourceWrapper(source))
  File "/amd.home/home/staudt/workspace/jython/Lib/xml/sax/drivers2/drv_javasax.py", line 90, in resolveEntity
    return JyInputSourceWrapper(self._resolver.resolveEntity(pubId, sysId))
  File "/amd.home/home/staudt/workspace/jython/Lib/xml/sax/drivers2/drv_javasax.py", line 75, in __init__
    if source.getByteStream():
AttributeError: 'unicode' object has no attribute 'getByteStream'

当我查看drv_javasax.py的源代码时,似乎输入未被识别为像对象这样的文件。 关于如何解决这个问题的任何想法?

2 个答案:

答案 0 :(得分:1)

我认为这是错误:http://bugs.jython.com/issue1488。在Jython 2.5.2-b1中修复:http://www.jython.org/latest.html

答案 1 :(得分:0)

当您在print type(input)声明后插入with时,您看到了什么?

当你恢复旧式“try / finally”代码而不是“with”时,它是否适用于所有文件?

有效的文件与不起作用的文件有什么不同?

如果将名称input更改为不影响内置函数的内容会怎样?