Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #97438 > unrolled thread

Python 2 ‘print’, coercing arguments to Unicode

Started byBen Finney <ben+python@benfinney.id.au>
First post2015-10-06 20:51 +1100
Last post2015-10-06 20:51 +1100
Articles 1 — 1 participant

Back to article view | Back to comp.lang.python


Contents

  Python 2 ‘print’, coercing arguments to Unicode Ben Finney <ben+python@benfinney.id.au> - 2015-10-06 20:51 +1100

#97438 — Python 2 ‘print’, coercing arguments to Unicode

FromBen Finney <ben+python@benfinney.id.au>
Date2015-10-06 20:51 +1100
SubjectPython 2 ‘print’, coercing arguments to Unicode
Message-ID<mailman.416.1444125125.28679.python-list@python.org>
Howdy all,

In Python 2.7, I am seeing this behaviour for ‘print’::

    Python 2.7.10 (default, Sep 13 2015, 20:30:50)
    [GCC 5.2.1 20150911] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> from __future__ import unicode_literals
    >>> from __future__ import print_function
    >>> import io
    >>> print(None)
    None
    >>> print(None, file=io.StringIO())
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: unicode argument expected, got 'str'

So, although my string literals are now Unicode objects, apparently
‘print’ still coerces objects using the bytes type ‘str’.

Binding the ‘str’ name to the Unicode type doesn't help::

    >>> str = unicode
    >>> print(None, file=io.StringIO())
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: unicode argument expected, got 'str'

The reason I need to do this is that I'm replacing the standard streams
(‘sys.stderr’, etc.) with ‘io.StringIO’ instances in a test suite. That
works great for everything but ‘print’.

Since this is a test suite for existing code, I don't have the option to
change all the existing statements; I need them to work as-is.

How can I convince ‘print’, everywhere throughout a module, that it
should coerce its arguments using ‘unicode’?

-- 
 \      “Not using Microsoft products is like being a non-smoker 40 or |
  `\     50 years ago: You can choose not to smoke, yourself, but it's |
_o__)               hard to avoid second-hand smoke.” —Michael Tiemann |
Ben Finney

[toc] | [standalone]


Back to top | Article view | comp.lang.python


csiph-web