[issue13342] input() builtin always uses "strict" error handler

Antoine Pitrou report at bugs.python.org
Fri Nov 4 16:06:20 CET 2011


Antoine Pitrou <pitrou at free.fr> added the comment:

> There cannot be a reason input() should be confined to "strict", or can 
> there? ;-)

Actually, there's a good reason: in the non-interactive case, input() simply calls sys.stdin.read(), which doesn't have encoding or errors attributes. You want to override sys.stdin so that it has the right error handler.

However, there is a bug in input() in that it ignores sys.stdin's error handler in interactive mode (where it delegates to the readline library, if present):

>>> import sys, io
>>> sys.stdin = io.TextIOWrapper(sys.stdin.detach(), "ascii", "replace")
>>> sys.stdin.read()
héhé
'h��h��\n'
>>> input()
héhé
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 1: ordinal not in range(128)


If you don't mind losing GNU readline functionality, the immediate workaround for you is to use sys.stdin.read() directly.

----------
components: +Interpreter Core -Unicode
nosy: +pitrou
stage:  -> needs patch
versions:  -Python 3.4

_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue13342>
_______________________________________


More information about the Python-bugs-list mailing list