@@ -248,7 +248,7 @@ parse_datum(PyObject *o, datum *d, const char *failmsg)
248248 Py_ssize_t size ;
249249 if (!PyArg_Parse (o , "s#" , & d -> dptr , & size )) {
250250 if (failmsg != NULL ) {
251- PyErr_SetString (PyExc_TypeError , failmsg );
251+ PyErr_Format (PyExc_TypeError , failmsg , Py_TYPE ( o ) -> tp_name , o , Py_TYPE ( o ) -> tp_name );
252252 }
253253 return 0 ;
254254 }
@@ -324,11 +324,12 @@ static int
324324gdbm_ass_sub_lock_held (PyObject * op , PyObject * v , PyObject * w )
325325{
326326 datum krec , drec ;
327- const char * failmsg = "gdbm mappings have bytes or string indices only" ;
327+ const char * key_failmsg = "dbm key returned %.100s for value %R But database keys must be bytes or str, not %.100s" ;
328+ const char * value_failmsg = "dbm value returned %.100s for value %R But database keys must be bytes or str, not %.100s" ;
328329 gdbmobject * dp = _gdbmobject_CAST (op );
329330 _gdbm_state * state = PyType_GetModuleState (Py_TYPE (dp ));
330331
331- if (!parse_datum (v , & krec , failmsg )) {
332+ if (!parse_datum (v , & krec , key_failmsg )) {
332333 return -1 ;
333334 }
334335 if (dp -> di_dbm == NULL ) {
@@ -349,7 +350,7 @@ gdbm_ass_sub_lock_held(PyObject *op, PyObject *v, PyObject *w)
349350 }
350351 }
351352 else {
352- if (!parse_datum (w , & drec , failmsg )) {
353+ if (!parse_datum (w , & drec , value_failmsg )) {
353354 return -1 ;
354355 }
355356 errno = 0 ;
0 commit comments