diff options
Diffstat (limited to 'fs')
-rw-r--r-- | fs/errors.py | 8 | ||||
-rw-r--r-- | fs/tests/test_errors.py | 6 |
2 files changed, 13 insertions, 1 deletions
diff --git a/fs/errors.py b/fs/errors.py index 076de4b..3528e2f 100644 --- a/fs/errors.py +++ b/fs/errors.py @@ -39,6 +39,7 @@ __all__ = ['FSError', import sys import errno +import six from fs.path import * from fs.local_functools import wraps @@ -63,7 +64,12 @@ class FSError(Exception): return str(self.msg % keys) def __unicode__(self): - return unicode(self.msg) % self.__dict__ + keys = {} + for k,v in self.__dict__.iteritems(): + if isinstance(v, six.binary_type): + v = v.decode(sys.getfilesystemencoding(), errors='replace') + keys[k] = v + return unicode(self.msg, encoding=sys.getfilesystemencoding(), errors='replace') % keys def __reduce__(self): return (self.__class__,(),self.__dict__.copy(),) diff --git a/fs/tests/test_errors.py b/fs/tests/test_errors.py index 2b2fa64..51d0262 100644 --- a/fs/tests/test_errors.py +++ b/fs/tests/test_errors.py @@ -1,3 +1,4 @@ +# -*- encoding: utf-8 -*- """ fs.tests.test_errors: testcases for the fs error classes functions @@ -24,3 +25,8 @@ class TestErrorPickling(unittest.TestCase): assert_dump_load(UnsupportedError("makepony")) +class TestFSError(unittest.TestCase): + + def test_unicode_representation_of_error_with_non_ascii_characters(self): + path_error = PathError('/Shïrê/Frødø') + _ = unicode(path_error)
\ No newline at end of file |