Modify

Ticket #50 (closed defect: fixed)

Opened 7 years ago

Last modified 7 years ago

ScannerError TypeError

Reported by: edemaine@… Owned by: xi
Priority: normal Component: pyyaml
Severity: normal Keywords:
Cc:

Description

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.

Attachments

Change History

comment:1 Changed 7 years ago by xi

Strangely enough, it works for me:

>>> import yaml
>>> data = '<HTML>\n  <HEAD>\n    <STYLE>\n      TABLE { border-collapse: collapse; }\n    </STYLE>\n  </HEAD>\n</HTML>'
>>> yaml.load(data, Loader=yaml.CLoader)
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
  File "/usr/lib/python2.4/site-packages/PIL/__init__.py", line 66, in load

  File "build/lib.linux-i686-2.4/yaml/constructor.py", line 38, in get_data
  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
yaml.scanner.ScannerError: mapping values are not allowed in this context
  in "<string>", line 4, column 30

Are you using PyYAML from the trunk? Could this issue be related to the fact that you are using Python 2.6?

comment:2 Changed 7 years ago by edemaine@…

Sorry, I should have mentioned that I'm using Python 2.6, so perhaps it more of a prediction of a problem to come :-).

I just tried updating to the trunk. Same issue.

comment:3 Changed 7 years ago by xi

  • Status changed from new to assigned

comment:4 Changed 7 years ago by xi

  • Status changed from assigned to closed
  • Resolution set to fixed

It seems to be a Pyrex problem. Use the latest Pyrex and PyYAML trunk after [257].

View

Add a comment

Modify Ticket

Change Properties
<Author field>
Action
as closed
The resolution will be deleted. Next status will be 'reopened'
Author


E-mail address and user name can be saved in the Preferences.

 
Note: See TracTickets for help on using tickets.