homepage

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 arno
Recipients arno
Date 2010年10月02日.20:35:16
SpamBayes Score 1.7652546e-14
Marked as misclassified No
Message-id <1286051720.0.0.33399911329.issue10017@psf.upfronthosting.co.za>
In-reply-to
Content
The pprint function in the python 3.1 pprint module fails when
printing a dictionary containing more than one item and with one item
being a user-defined type. It seems pprint tries to sort the keys but
fails, (maybe because calling __lt__ on a user-defined type doesn't
bind its first argument to 'self'? Looking into pprint.py would
probably yield the answer).
This seems related to issue 3976 but it was fixed in r76389 and
r76390. My example below fails in r79147. I'm not in a position to check more recent revisions right now.
In Python 2.6, the following works fine:
Python 2.6.5 (r265:79063, Apr 16 2010, 13:09:56) 
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from pprint import pprint
>>> class A(object): pass
... 
>>> pprint({A:1, 1:2})
{1: 2, <class __main__.A at 0xb77dc47c>: 1}
But in Python 3.1, it fails with the error below:
Python 3.1.2 (r312:79147, Apr 15 2010, 12:35:07) 
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from pprint import pprint
>>> class A: pass
... 
>>> pprint({A:1, 1:2})
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
 File "/usr/lib/python3.1/pprint.py", line 55, in pprint
 printer.pprint(object)
 File "/usr/lib/python3.1/pprint.py", line 132, in pprint
 self._format(object, self._stream, 0, 0, {}, 0)
 File "/usr/lib/python3.1/pprint.py", line 155, in _format
 rep = self._repr(object, context, level - 1)
 File "/usr/lib/python3.1/pprint.py", line 242, in _repr
 self._depth, level)
 File "/usr/lib/python3.1/pprint.py", line 254, in format
 return _safe_repr(object, context, maxlevels, level)
 File "/usr/lib/python3.1/pprint.py", line 296, in _safe_repr
 items = sorted(object.items(), key=_safe_tuple)
 File "/usr/lib/python3.1/pprint.py", line 89, in __lt__
 rv = self.obj.__lt__(other.obj)
TypeError: expected 1 arguments, got 0
History
Date User Action Args
2010年10月02日 20:35:20arnosetrecipients: + arno
2010年10月02日 20:35:20arnosetmessageid: <1286051720.0.0.33399911329.issue10017@psf.upfronthosting.co.za>
2010年10月02日 20:35:18arnolinkissue10017 messages
2010年10月02日 20:35:16arnocreate

AltStyle によって変換されたページ (->オリジナル) /