Custom Query (121 matches)
Results (82 - 84 of 121)
| Ticket | Resolution | Summary | Owner | Reporter |
|---|---|---|---|---|
| #79 | wontfix | Multiple scalar values used as key creates Python hash error | xi | clay@… |
| Description |
The YAML specification suggests that a mapping can have a key made of more than one item, as in ? - Detroit Tigers - Chicago cubs : - 2001-07-23 However, when that data is imported via yaml.load(), PyYAML exits with a yaml.constructor.ConstructorError?, saying "found unacceptable key (list objects are unhashable)" Is there a way to force multi-value keys to be processed as tuples instead of lists? |
|||
| #54 | fixed | load() fails to load consecutive documents | xi | cems at lanl dot gov |
| Description |
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)
---> 66 return loader.get_data()
/sw/lib/python2.5/site-packages/yaml/constructor.py in get_data(self)
---> 38 return self.construct_document(self.get_node())
/sw/lib/python2.5/site-packages/yaml/composer.py in get_node(self)
---> 23 return self.compose_document()
/sw/lib/python2.5/site-packages/yaml/composer.py in compose_document(self)
---> 35 node = self.compose_node(None, None)
/sw/lib/python2.5/site-packages/yaml/composer.py in compose_node(self, parent, index)
---> 52 anchor = event.anchor
<type 'exceptions.AttributeError?'>: 'NoneType?' object has no attribute 'anchor' In [156]: |
|||
| #49 | fixed | yaml confused by python float repr() | xi | cems a.t. lanl.gov |
| Description |
platform: intel macintosh, python2.5 , latest yaml. Description: depending on a floats value dump() will output a different representation format. Sometimes it uses a tag format and others a standard float notation depending on the value. example: In [160]:dat ="""
float1: 1.0E-8
float2: 1.0E-9
"""
In [165]:t = yaml.load(dat)
In [166]:t
Out[166]:{'float1': 1e-08, 'float2': 1.0000000000000001e-09}
In [167]:yaml.dump(t)
Out[167]:"{float1: !!float '1e-08', float2: 1.0000000000000001e-09}\n"
notice the !!float tag followed by a string. regression: this appears to be an attempt to compensate for fact that python's string representation of some float values having different formats: that is in python2.5 the repr() of 1.0e-8 is actually 1e-08 (it supresses the decimal point). Since YAML does not recognize floats without the decimal point the dump command adds the float tag. However while the repr() of 1.0E-9 is 1.0000000000000001e-09. which has the decimal point making it legal YAML and it dump avoids the float tag It seems to me that a more consistent and desirable result would be obtained if dump were to output 1e-8 as 1.0e-8 rather than using the float if one is parsing a yaml file in another language the tagged format of the float can't be read easily. (e.g. consider reading this in fortran or perl without using a yaml lib to read the file.) |
|||
