我刚刚开始使用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
的源代码时,似乎输入未被识别为像对象这样的文件。
关于如何解决这个问题的任何想法?
答案 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
更改为不影响内置函数的内容会怎样?