I'm getting a unicodeescape error importing matplotlib in the IPython notebook interface. The traceback is shown below. Annotate states that https://github.com/matplotlib/matplotlib/commit/bd71341ff645e1e4eb7470a5d2a5541e73bf6d5f introduced the changes to __init__.py which appears to have instigated the error. I was able to import matplotlib 1.3.1 in the IPython notebook. This traceback is appearing for me in both IPython 1.0.0 and 1.1.0. I'm on win32 32-bit. I would appreciate feedback on whether this is a real regression or something on my system.
import matplotlib
···
---------------------------------------------------------------------------
UnicodeDecodeError Traceback (most recent call last)
<ipython-input-1-82be63b7783c> in <module>()
----> 1 import matplotlib
C:\Python27\lib\site-packages\matplotlib\__init__.py in <module>()
--> 240 class Verbose:
C:\Python27\lib\site-packages\matplotlib\__init__.py in Verbose()
--> 252 for arg in map(six.u, sys.argv[1:]):
C:\Python27\lib\site-packages\six.pyc in u(s)
--> 468 return unicode(s, "unicode_escape")
UnicodeDecodeError: 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape
Thanks,
Joel
I'll bet that one of the arguments starts with C:\Users. It looks like
six.u() can't be applied to arbitrary input (it's intended for literals).
Thomas
···
On 6 December 2013 04:55, Joel B. Mohler <jmohler@...1176...> wrote:
C:\Python27\lib\site-packages\matplotlib\__init__.py in Verbose()
--> 252 for arg in map(six.u, sys.argv[1:]):
C:\Python27\lib\site-packages\six.pyc in u(s)
--> 468 return unicode(s, "unicode_escape")
UnicodeDecodeError: 'unicodeescape' codec can't decode bytes in position
2-3: truncated \UXXXXXXXX escape
Indeed, I suspect you are exactly right. After pondering the
transcript below, I think it is bad idea to apply six.u to any sort
of relatively unknown input. In any case, I believe this
effectively breaks matplotlib in the IPython notebook on windows and
other very simple things. Behold:
C:>python -c “import matplotlib” any_old_thing_with_\u_in_it
Traceback (most recent call last):
File “”, line 1, in
File “c:\python27\lib\site-packages\matplotlib_init_.py”, line
240, in
class Verbose:
File “c:\python27\lib\site-packages\matplotlib_init_.py”, line
252, in Verbose
for arg in map(six.u, sys.argv[1:]):
File “c:\python27\lib\site-packages\six.py”, line 468, in u
return unicode(s, “unicode_escape”)
UnicodeDecodeError: ‘unicodeescape’ codec can’t decode bytes in
position 19-20: truncated \uXXXX escape
It seems to me that this changeset needs to be rolled back, but I
don’t clearly see the problem that it was intended to fix.
Joel
···
On 12/6/2013 12:45 PM, Thomas Kluyver
wrote:
On 6 December 2013 04:55, Joel B.
Mohler <jmohler@…1176…>
wrote:
C:\Python27\lib\site-packages\matplotlib\__init__.py
in Verbose()
--> 252 for arg in map(six.u, sys.argv[1:]):
C:\Python27\lib\site-packages\six.pyc in u(s)
--> 468 return unicode(s, "unicode_escape")
UnicodeDecodeError: 'unicodeescape' codec can't decode
bytes in position
2-3: truncated \UXXXXXXXX escape
I'll bet that one of the arguments
starts with C:\Users. It looks like six.u() can’t be applied
to arbitrary input (it’s intended for literals).
I assume that someone wanted to work with the arguments as text (i.e.
unicode) strings. A robust way to do this would be something like the
str_to_unicode function we have in IPython - it's a no-op on Python 3, and
does a robust decode (using errors='replace') on Python 2.
Thomas
···
On 6 December 2013 10:37, Joel B. Mohler <jmohler@...1176...> wrote:
It seems to me that this changeset needs to be rolled back, but I don't
clearly see the problem that it was intended to fix.
I'll bring this to @minrk's attention in the original issue (#2534)
Mike
···
On 12/06/2013 02:20 PM, Thomas Kluyver wrote:
On 6 December 2013 10:37, Joel B. Mohler <jmohler@...1176... > <mailto:jmohler@…1176…>> wrote:
It seems to me that this changeset needs to be rolled back, but I
don't clearly see the problem that it was intended to fix.
I assume that someone wanted to work with the arguments as text (i.e. unicode) strings. A robust way to do this would be something like the str_to_unicode function we have in IPython - it's a no-op on Python 3, and does a robust decode (using errors='replace') on Python 2.
Thomas
------------------------------------------------------------------------------
Sponsored by Intel(R) XDK
Develop, test and display web and hybrid apps with a single code base.
Download it for free now!
http://pubads.g.doubleclick.net/gampad/clk?id=111408631&iu=/4140/ostg.clktrk
_______________________________________________
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
matplotlib-devel List Signup and Options
--
_
\/|o _|_ _. _ | | \.__ __|__|_|_ _ _ ._ _
>>(_| |(_|(/_| |_/|(_)(/_|_ |_|_)(_)(_)| | |