This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author Shawn.Brown
Recipients Shawn.Brown
Date 2012-06-04.03:32:14
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1338780735.82.0.957035826982.issue14998@psf.upfronthosting.co.za>
In-reply-to
Content
This is related to resolved issue 3976 and, to a lesser extent, issue 10017.

I've run across another instance where pprint throws an exception (but works fine in 2.7 and earlier):

Python 3.2 (r32:88445, Mar 25 2011, 19:28:28) 
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from pprint import pprint
>>> pprint({(0,): 1, (None,): 2})
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.2/pprint.py", line 55, in pprint
    printer.pprint(object)
  File "/usr/lib/python3.2/pprint.py", line 132, in pprint
    self._format(object, self._stream, 0, 0, {}, 0)
  File "/usr/lib/python3.2/pprint.py", line 155, in _format
    rep = self._repr(object, context, level - 1)
  File "/usr/lib/python3.2/pprint.py", line 245, in _repr
    self._depth, level)
  File "/usr/lib/python3.2/pprint.py", line 257, in format
    return _safe_repr(object, context, maxlevels, level)
  File "/usr/lib/python3.2/pprint.py", line 299, in _safe_repr
    items = sorted(object.items(), key=_safe_tuple)
  File "/usr/lib/python3.2/pprint.py", line 89, in __lt__
    rv = self.obj.__lt__(other.obj)
TypeError: unorderable types: int() < NoneType()

The above example might seem contrived but I stumbled across the issue quite naturally. Honest!

In working with multiple lists and computing results using combinations of these lists' values.  I _could_ organize the results as a dictionary of dictionaries of dictionaries but that would get confusing very quickly.  Instead, I'm using a single dictionary with a composite key ("flat is better than nested"). So I've got code like this...

>>> combinations = itertools.product(lst_x, lst_y, lst_z)
>>> results = {(x,y,z): compute(x,y,z) for x,y,z in combinations}

... and it is not uncommon for one or more of the values to be None -- resulting in the above exception should anyone (including unittest) attempt to pprint the dictionary.
History
Date User Action Args
2012-06-04 03:32:16Shawn.Brownsetrecipients: + Shawn.Brown
2012-06-04 03:32:15Shawn.Brownsetmessageid: <1338780735.82.0.957035826982.issue14998@psf.upfronthosting.co.za>
2012-06-04 03:32:15Shawn.Brownlinkissue14998 messages
2012-06-04 03:32:14Shawn.Browncreate