-
Type:
Bug
-
Resolution: Fixed
-
Priority:
Major - P3
-
Affects Version/s: 3.7.2
-
Component/s: Error Handling
-
None
-
None
-
None
-
None
-
None
-
None
-
None
-
None
This only affects Python 2.
When the mongo server returns an error string containing Unicode, pymongo creates an exception, and uses str() to store the message. Since the string contains non-ascii characters, the exception cannot be rendered correctly and looks like this:
pymongo.errors.WriteError: <exception str() failed>
This prevents understanding what the actual error is.
Here's an example.
>>> conn = pymongo.MongoClient() >>> test_col = conn.test.test_col >>> test_col.create_index('a', unique=True)
Exception for an ASCII value:
>>> test_col.insert(\{'a': 'A'*10000})
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/lib/python2.7/site-packages/pymongo/collection.py", line 3161, in insert
check_keys, manipulate, write_concern)
File "/lib/python2.7/site-packages/pymongo/collection.py", line 607, in _insert
bypass_doc_val, session)
File "/lib/python2.7/site-packages/pymongo/collection.py", line 595, in _insert_one
acknowledged, _insert_command, session)
File "/lib/python2.7/site-packages/pymongo/mongo_client.py", line 1248, in _retryable_write
return self._retry_with_session(retryable, func, s, None)
File "/lib/python2.7/site-packages/pymongo/mongo_client.py", line 1201, in _retry_with_session
return func(session, sock_info, retryable)
File "/lib/python2.7/site-packages/pymongo/collection.py", line 592, in _insert_command
_check_write_command_response(result)
File "/lib/python2.7/site-packages/pymongo/helpers.py", line 217, in _check_write_command_response
_raise_last_write_error(write_errors)
File "/lib/python2.7/site-packages/pymongo/helpers.py", line 199, in _raise_last_write_error
raise WriteError(error.get("errmsg"), error.get("code"), error)
pymongo.errors.WriteError: WiredTigerIndex::insert: key too large to index, failing 10012 \{ : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA..." }
Exception for a Unicode value:
>>> test_col.insert(\{'a': u'\U0001f40d'*10000})
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/lib/python2.7/site-packages/pymongo/collection.py", line 3161, in insert
check_keys, manipulate, write_concern)
File "/lib/python2.7/site-packages/pymongo/collection.py", line 607, in _insert
bypass_doc_val, session)
File "/lib/python2.7/site-packages/pymongo/collection.py", line 595, in _insert_one
acknowledged, _insert_command, session)
File "/lib/python2.7/site-packages/pymongo/mongo_client.py", line 1248, in _retryable_write
return self._retry_with_session(retryable, func, s, None)
File "/lib/python2.7/site-packages/pymongo/mongo_client.py", line 1201, in _retry_with_session
return func(session, sock_info, retryable)
File "/lib/python2.7/site-packages/pymongo/collection.py", line 592, in _insert_command
_check_write_command_response(result)
File "/lib/python2.7/site-packages/pymongo/helpers.py", line 217, in _check_write_command_response
_raise_last_write_error(write_errors)
File "/lib/python2.7/site-packages/pymongo/helpers.py", line 199, in _raise_last_write_error
raise WriteError(error.get("errmsg"), error.get("code"), error)
pymongo.errors.WriteError: <exception str() failed>
- causes
-
PYTHON-1966 unicode(PyMongoError) fails with UnicodeDecodeError on Python 2
-
- Closed
-
- is related to
-
SERVER-24007 Server can return invalid UTF8 for error messages due to truncation in the middle of a code point
-
- Backlog
-