diff --git a/src/mog_commons/__init__.py b/src/mog_commons/__init__.py index 7525d19..66a87bb 100644 --- a/src/mog_commons/__init__.py +++ b/src/mog_commons/__init__.py @@ -1 +1 @@ -__version__ = '0.1.4' +__version__ = '0.1.5' diff --git a/src/mog_commons/string.py b/src/mog_commons/string.py index 321c6a2..bf9e53c 100644 --- a/src/mog_commons/string.py +++ b/src/mog_commons/string.py @@ -131,10 +131,11 @@ def unicode_decode(data, encoding_list): assert encoding_list, 'encodings must not be empty.' xs = distinct(encoding_list if isinstance(encoding_list, list) else [encoding_list]) - init, last = xs[:-1], xs[-1] - for encoding in init: + first_exp = None + for i, encoding in enumerate(xs): try: return data.decode(encoding) - except UnicodeDecodeError: - pass - return data.decode(last) + except UnicodeDecodeError as e: + if i == 0: + first_exp = e + raise first_exp diff --git a/tests/mog_commons/test_string.py b/tests/mog_commons/test_string.py index 399abc8..08366ba 100644 --- a/tests/mog_commons/test_string.py +++ b/tests/mog_commons/test_string.py @@ -106,5 +106,8 @@ def test_unicode_decode(self): self.assertEqual(string.unicode_decode('あいうえお'.encode('utf-8'), ['utf-8', 'utf-8', 'utf-8']), 'あいうえお') self.assertEqual(string.unicode_decode('あいうえお'.encode('sjis'), ['ascii', 'utf-8', 'sjis']), 'あいうえお') self.assertRaisesRegexp( - UnicodeDecodeError, "'shift_jis' codec can't decode", + UnicodeDecodeError, "'ascii' codec can't decode", string.unicode_decode, 'あいうえお'.encode('utf-8'), ['ascii', 'sjis']) + self.assertRaisesRegexp( + UnicodeDecodeError, "'shift_jis' codec can't decode", + string.unicode_decode, 'あいうえお'.encode('utf-8'), ['sjis', 'ascii'])