diff options
author | Walter Dörwald <walter@livinglogic.de> | 2003-08-12 17:32:43 (GMT) |
---|---|---|
committer | Walter Dörwald <walter@livinglogic.de> | 2003-08-12 17:32:43 (GMT) |
commit | fd196bd263c0474c2d40dc2505ce76d4a8f1b9e2 (patch) | |
tree | 7e8d6a8e3250e64fbf336ca5917b94ebe5c36387 /Python/exceptions.c | |
parent | c7a26562f93b8f6fffd65b506ff2aa65297717e4 (diff) | |
download | cpython-fd196bd263c0474c2d40dc2505ce76d4a8f1b9e2.zip cpython-fd196bd263c0474c2d40dc2505ce76d4a8f1b9e2.tar.gz cpython-fd196bd263c0474c2d40dc2505ce76d4a8f1b9e2.tar.bz2 |
Enhance message for UnicodeEncodeError and UnicodeTranslateError.
If there is only one bad character it will now be printed in a
form that is a valid Python string.
Diffstat (limited to 'Python/exceptions.c')
-rw-r--r-- | Python/exceptions.c | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/Python/exceptions.c b/Python/exceptions.c index f8e330f..d49b364 100644 --- a/Python/exceptions.c +++ b/Python/exceptions.c @@ -1251,10 +1251,18 @@ UnicodeEncodeError__str__(PyObject *self, PyObject *arg) goto error; if (end==start+1) { + int badchar = (int)PyUnicode_AS_UNICODE(objectObj)[start]; + char *format; + if (badchar <= 0xff) + format = "'%.400s' codec can't encode character '\\x%02x' in position %d: %.400s"; + else if (badchar <= 0xffff) + format = "'%.400s' codec can't encode character '\\u%04x' in position %d: %.400s"; + else + format = "'%.400s' codec can't encode character '\\U%08x' in position %d: %.400s"; PyOS_snprintf(buffer, sizeof(buffer), - "'%.400s' codec can't encode character '\\u%x' in position %d: %.400s", + format, PyString_AS_STRING(encodingObj), - (int)PyUnicode_AS_UNICODE(objectObj)[start], + badchar, start, PyString_AS_STRING(reasonObj) ); @@ -1329,7 +1337,7 @@ UnicodeDecodeError__str__(PyObject *self, PyObject *arg) if (end==start+1) { PyOS_snprintf(buffer, sizeof(buffer), - "'%.400s' codec can't decode byte 0x%x in position %d: %.400s", + "'%.400s' codec can't decode byte 0x%02x in position %d: %.400s", PyString_AS_STRING(encodingObj), ((int)PyString_AS_STRING(objectObj)[start])&0xff, start, @@ -1438,9 +1446,17 @@ UnicodeTranslateError__str__(PyObject *self, PyObject *arg) goto error; if (end==start+1) { + int badchar = (int)PyUnicode_AS_UNICODE(objectObj)[start]; + char *format; + if (badchar <= 0xff) + format = "can't translate character '\\x%02x' in position %d: %.400s"; + else if (badchar <= 0xffff) + format = "can't translate character '\\u%04x' in position %d: %.400s"; + else + format = "can't translate character '\\U%08x' in position %d: %.400s"; PyOS_snprintf(buffer, sizeof(buffer), - "can't translate character '\\u%x' in position %d: %.400s", - (int)PyUnicode_AS_UNICODE(objectObj)[start], + format, + badchar, start, PyString_AS_STRING(reasonObj) ); |