Description:
if a file contains multiple documents, yaml.load() fails to work after the first document is read.
I have a text file called test.yml that looks like this:
---
as: "333 775260"
---
zz: "top"
the following code works as expected:
f = open("test.xml")
x = yaml.load_all(f)
[ i for i in x]
that loads both documents. it does it lazily using a generator x.
The following does NOT work as exepcted:
f = open("test.xml")
yaml.load(f)
yaml.load(f)
the first yaml.load(f) works and loads the first document.
the second one fails. From the documentation I beleive yaml.load should consecutively load the next document upon each invocation on the stream. The error message upon failing to load varies depending upon what is in the second document. In the case shown here is the stack trace from ipython2.5
In [153]: f = open("test4.yml")
In [154]: yaml.load(f)
Out[154]: {'as': '333 775260'}
In [155]: yaml.load(f)
<type 'exceptions.AttributeError?'> Traceback (most recent call last)
/Users/cems/Documents/Collaboration/brettin/poisson_estimates/ace_to_yaml/<ipython console> in <module>()
/sw/lib/python2.5/site-packages/yaml/init.py in load(stream, Loader)
64 loader = Loader(stream)
65 if loader.check_data():
---> 66 return loader.get_data()
67
68 def safe_load_all(stream):
/sw/lib/python2.5/site-packages/yaml/constructor.py in get_data(self)
36 # Construct and return the next document.
37 if self.check_node():
---> 38 return self.construct_document(self.get_node())
39
40 def g(): yield None
/sw/lib/python2.5/site-packages/yaml/composer.py in get_node(self)
21 # Get the root node of the next document.
22 if not self.check_event(StreamEndEvent?):
---> 23 return self.compose_document()
24
25 def compose_document(self):
/sw/lib/python2.5/site-packages/yaml/composer.py in compose_document(self)
33
34 # Compose the root node.
---> 35 node = self.compose_node(None, None)
36
37 # Drop the DOCUMENT-END event.
/sw/lib/python2.5/site-packages/yaml/composer.py in compose_node(self, parent, index)
50 return self.anchors[anchor]
51 event = self.peek_event()
---> 52 anchor = event.anchor
53 if anchor is not None:
54 if anchor in self.anchors:
<type 'exceptions.AttributeError?'>: 'NoneType?' object has no attribute 'anchor'
In [156]: