I encountered a small bug in error reporting with the libyaml interface:
## A "real-world" example: mistaken input HTML instead of YAML.
>>> x='<HTML>\n <HEAD>\n <STYLE>\n TABLE { border-collapse: collapse; }\n </STYLE>\n </HEAD>\n</HTML>'
>>> yaml.load(x)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/toc/home/edemaine/Packages/lib/python2.6/site-packages/yaml/__init__.py", line 66, in load
return loader.get_data()
File "/toc/home/edemaine/Packages/lib/python2.6/site-packages/yaml/constructor.py", line 38, in get_data
return self.construct_document(self.get_node())
File "/toc/home/edemaine/Packages/lib/python2.6/site-packages/yaml/composer.py", line 27, in get_node
return self.compose_document()
File "/toc/home/edemaine/Packages/lib/python2.6/site-packages/yaml/composer.py", line 37, in compose_document
self.get_event()
File "/toc/home/edemaine/Packages/lib/python2.6/site-packages/yaml/parser.py", line 115, in get_event
self.current_event = self.state()
File "/toc/home/edemaine/Packages/lib/python2.6/site-packages/yaml/parser.py", line 186, in parse_document_end
token = self.peek_token()
File "/toc/home/edemaine/Packages/lib/python2.6/site-packages/yaml/scanner.py", line 128, in peek_token
self.fetch_more_tokens()
File "/toc/home/edemaine/Packages/lib/python2.6/site-packages/yaml/scanner.py", line 220, in fetch_more_tokens
return self.fetch_value()
File "/toc/home/edemaine/Packages/lib/python2.6/site-packages/yaml/scanner.py", line 579, in fetch_value
self.get_mark())
yaml.scanner.ScannerError: mapping values are not allowed here
in "<string>", line 4, column 30:
TABLE { border-collapse: collapse; }
^
## great error reporting
>>> yaml.load(x,yaml.CLoader) Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/toc/home/edemaine/Packages/lib/python2.6/site-packages/yaml/__init__.py", line 66, in load
return loader.get_data()
File "/toc/home/edemaine/Packages/lib/python2.6/site-packages/yaml/constructor.py", line 38, in get_data
return self.construct_document(self.get_node())
File "_yaml.pyx", line 664, in _yaml.CParser.get_node
File "_yaml.pyx", line 669, in _yaml.CParser._compose_document
File "_yaml.pyx", line 848, in _yaml.CParser._parse_next_event
TypeError: exceptions must be strings, classes, or instances, not ScannerError
## not so useful--seems to be a bug
I didn't investigate why ScannerError is considered to be a class in the first case but not the second; perhaps _yaml defines its own ScannerError? type? Should probably just use yaml.scanner.ScannerError instead.