Why can't I set sys.ps1 to a unicode string?

RG rNOSPAMon at flownet.com
Thu Aug 12 08:50:13 CEST 2010

More precisely, why does sys.ps1 not appear if I set it to a unicode 
string?  This problem is hard for me to describe here because my 
newsreader is not properly unicode enabled, but here's the gist of it:

Python 2.6.1 (r261:67515, Feb 11 2010, 00:51:29) 
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type "help", "copyright", "credits" or "license" for more information.

First, let's make sure our encodings are set properly:

>>> import sys
>>> sys.stdin.encoding
>>> sys.stdout.encoding

Looks good.  Now, let's make two unicode strings, identical except for 
one character:

>>> s1 = u'%%% %%% '
>>> s2 = u'%%% ' + u'\u262f' + '%%% '
>>> print s1
%%% %%% 
>>> print s2
%%% /&%%% 

If this were a properly unicode-enabled newsreader you would see a 
yin-yang symbol in the middle of s2.

Now the weird part:

>>> sys.ps1 = s1
%%% %%% sys.ps1 = s2   # This is as expected
print s1               # But this isn't.  There's no prompt!
%%% %%%                # Everything still works
print s2
%%% /&%%% 
sys.ps1 = s1           # If we reset sys.ps1 we get our prompt back
%%% %%% sys.ps1 = '>>> '
>>> sys.ps1 = u'>>> '

So... why does having a non-ascii character in sys.ps1 make the prompt 

(If you're wondering why I care, I want to connect to an interactive 
python interpreter from another program, and I want a non-ascii 
delimiter to unambiguously mark the end of the interpreter's output on 
every interaction.)


More information about the Python-list mailing list