Message117895
| 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:20 | arno | set | recipients:
+ arno |
| 2010年10月02日 20:35:20 | arno | set | messageid: <1286051720.0.0.33399911329.issue10017@psf.upfronthosting.co.za> |
| 2010年10月02日 20:35:18 | arno | link | issue10017 messages |
| 2010年10月02日 20:35:16 | arno | create |
|