Add extra log for debug when UnicodeDecodeError happened (#674)
diff --git a/mobly/controllers/android_device.py b/mobly/controllers/android_device.py
index b9f2b36..38e6eed 100644
--- a/mobly/controllers/android_device.py
+++ b/mobly/controllers/android_device.py
@@ -189,7 +189,11 @@
Returns:
A list of android device serial numbers.
"""
- clean_lines = new_str(device_list_str, 'utf-8').strip().split('\n')
+ try:
+ clean_lines = new_str(device_list_str, 'utf-8').strip().split('\n')
+ except UnicodeDecodeError:
+ logging.warning("unicode decode error, origin str: %s", device_list_str)
+ raise
results = []
for line in clean_lines:
tokens = line.strip().split('\t')
diff --git a/tests/mobly/controllers/android_device_test.py b/tests/mobly/controllers/android_device_test.py
index bd07179..1611bfa 100755
--- a/tests/mobly/controllers/android_device_test.py
+++ b/tests/mobly/controllers/android_device_test.py
@@ -1298,6 +1298,18 @@
'adb.AdbError or adb.AdbTimeoutError exception raised but not handled.'
)
+ def test_AndroidDevice_parse_parse_device_list_when_decode_error(self):
+ gbk_str = b'\xc4\xe3\xba\xc3'
+ raised = False
+ try:
+ android_device.parse_device_list(gbk_str, "somekey")
+ except UnicodeDecodeError:
+ raised = True
+ self.assertTrue(
+ raised,
+ 'did not raise an exception when parsing gbk bytes'
+ )
+
if __name__ == '__main__':
unittest.main()