Jython与xml.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
当你在你的 with
语句后面加上 print type(input)
这行代码时,你会看到什么?
如果你用老式的 "try/finally" 代码来代替 "with",这样做对所有文件都有效吗?
那些能正常工作的文件和那些不工作的文件有什么不同?
如果你把 input
这个名字换成一个不和内置函数冲突的名字,会发生什么?
1
我觉得这是一个错误:http://bugs.jython.com/issue1488。这个问题在 Jython 2.5.2-b1 版本中修复了:http://www.jython.org/latest.html