classification
Title: Use pprint in displayhook
Type: enhancement Stage: patch review
Components: Versions: Python 3.4
process
Status: open Resolution:
Dependencies: 19100 19104 19132 Superseder:
Assigned To: Nosy List: fdrake, pitrou, rhettinger, serhiy.storchaka, terry.reedy
Priority: normal Keywords: patch

Created on 2013-09-27 11:41 by serhiy.storchaka, last changed 2013-09-29 20:22 by serhiy.storchaka.

Files
File name Uploaded Description Edit
displayhook_pprint.patch serhiy.storchaka, 2013-09-27 11:41 review
displayhook_pprint_2.patch serhiy.storchaka, 2013-09-27 14:11 review
Messages (4)
msg198468 - (view) Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) Date: 2013-09-27 11:41
pprint.pprint() produces more human readable output than print(repr()) which is used in sys.displayhook(). The proposed patch changes sys.displayhook in site.py. You still can access original displayhook as sys.__displayhook__.
msg198477 - (view) Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) Date: 2013-09-27 14:11
In second patch the COLUMNS environment variable is used to determine pprint's width.
msg198556 - (view) Author: Terry J. Reedy (terry.reedy) * (Python committer) Date: 2013-09-28 21:52
(in the patch, import of sys and pprint should be done once at module level and not repeated with every line of interactive output).

> pprint.pprint() produces more human readable output than print(repr()) which is used in sys.displayhook()

Only sometimes, and when it is not, the result can be *much* worse. For instance, try list(range(40)) with the two options. On windows, pprint.pprint(list(range(300))) will not even fit in the default 300 line output buffer of the standard interpreter. This is not to mention doctest and other test breakage. I believe the majority consensus on python-ideas was to reject this until pprint is much improved, and then reconsider. I agree with that.

As I said on the list, I think this is more feasible for environments (like Idle) where it could be turned on and off, or invoked to re-display an output where pprint *would* be better.
msg198646 - (view) Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) Date: 2013-09-29 20:22
> (in the patch, import of sys and pprint should be done once at module level and not repeated with every line of interactive output).

See a comment at the start of the Lib/_sitebuiltins.py file. Yes, importing sys in the function is redundant.

> For instance, try list(range(40)) with the two options.

Well, I have opened issue19132 for this.

> This is not to mention doctest and other test breakage.

AFAIK doctests doesn't test output longer than 80 characters.

> I believe the majority consensus on python-ideas was to reject this until pprint is much improved, and then reconsider.

There are other pprint-related issue which are opened long time without any progress (e.g. issue7434). I intend making progress on issues which are required for fixing pprint enough to be reasonable replacement for displayhook.
History
Date User Action Args
2013-09-29 20:22:18serhiy.storchakasetdependencies: + Add compact mode to pprint
messages: + msg198646
2013-09-28 21:52:43terry.reedysetnosy: + rhettinger
2013-09-28 21:52:05terry.reedysetnosy: + terry.reedy
messages: + msg198556
2013-09-27 15:12:04serhiy.storchakasetdependencies: + Use backslashreplace in pprint, pprint produces invalid output for long strings
2013-09-27 14:11:59serhiy.storchakasetfiles: + displayhook_pprint_2.patch

messages: + msg198477
2013-09-27 11:41:47serhiy.storchakacreate