summaryrefslogtreecommitdiffstats
path: root/Python
diff options
context:
space:
mode:
authorWalter Dörwald <walter@livinglogic.de>2003-08-12 17:32:43 (GMT)
committerWalter Dörwald <walter@livinglogic.de>2003-08-12 17:32:43 (GMT)
commitfd196bd263c0474c2d40dc2505ce76d4a8f1b9e2 (patch)
tree7e8d6a8e3250e64fbf336ca5917b94ebe5c36387 /Python
parentc7a26562f93b8f6fffd65b506ff2aa65297717e4 (diff)
downloadcpython-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')
-rw-r--r--Python/exceptions.c26
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)
);