[IPython-user] Using yaml with ipython is goofy

Matthew Wilson matt@tplus1....
Sat Feb 14 16:19:48 CST 2009

I tried playing with yaml in an ipython session and got weird results.
yaml.load returned a string!

First, here's what happens in a not-ipython session:

    $ python
    Python 2.6b2+ (trunk:65208, Jul 23 2008, 17:02:49)
    [GCC 4.2.3 (Ubuntu 4.2.3-2ubuntu7)] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import yaml
    >>> class Y:
    ...     pass
    >>> yaml.load("""
    ... !!python/object:__main__.Y
    ... name: Yahoo
    ... """)
    <__main__.Y instance at 0x82ec5ec>
    >>> type(yaml.load("""
    ... !!python/object:__main__.Y
    ... name: Yahoo
    ... """))
    <type 'instance'>

Now this is what happens in my beloved ipython:

    $ ipython
    DeprecationWarning: the sets module is deprecated
      from sets import Set
    Python 2.6b2+ (trunk:65208, Jul 23 2008, 17:02:49) 
    Type "copyright", "credits" or "license" for more information.

    IPython 0.9.1 -- An enhanced Interactive Python.
    ?         -> Introduction and overview of IPython's features.
    %quickref -> Quick reference.
    help      -> Python's own help system.
    object?   -> Details about 'object'. ?object also works, ?? prints more.

    In [1]: import yaml

    In [2]: class Y:
       ...:     pass

    In [3]: y = yaml.load("""
       ...: !!python/object:__main__.Y
       ...: name: Yahoo
       ...: """)

And then I got a big traceback, ending with:

    ScannerError: mapping values are not allowed here
      in "<string>", line 3, column 5:
        name: Yahoo

So, what is going on here?  What am I doing wrong?


More information about the IPython-user mailing list