summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--fs/errors.py8
-rw-r--r--fs/tests/test_errors.py6
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