diff options
| author | Ethan Furman <ethan@stoneleaf.us> | 2014-03-21 06:38:46 -0700 |
|---|---|---|
| committer | Ethan Furman <ethan@stoneleaf.us> | 2014-03-21 06:38:46 -0700 |
| commit | 9ab748013b00d6873b07c15ce50927104f5ece63 (patch) | |
| tree | 5d4fbd8b80ce56ce7f1ca41b4f09a8faa843f1f6 /Objects/unicodeobject.c | |
| parent | a17d6780980f5c1ca940b5260edcec4cf103469c (diff) | |
| download | cpython-git-9ab748013b00d6873b07c15ce50927104f5ece63.tar.gz | |
Issue19995: more informative error message; spelling corrections; use operator.mod instead of __mod__
Diffstat (limited to 'Objects/unicodeobject.c')
| -rw-r--r-- | Objects/unicodeobject.c | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index 87cc5c23c7..e38ded0fbc 100644 --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -13986,11 +13986,13 @@ mainformatlong(PyObject *v, if (!PyNumber_Check(v)) goto wrongtype; - /* make sure number is a type of integer */ + /* make sure number is a type of integer for o, x, and X */ if (!PyLong_Check(v)) { if (type == 'o' || type == 'x' || type == 'X') { iobj = PyNumber_Index(v); if (iobj == NULL) { + if (PyErr_ExceptionMatches(PyExc_TypeError)) + goto wrongtype; return -1; } } @@ -14052,10 +14054,23 @@ mainformatlong(PyObject *v, return 0; wrongtype: - PyErr_Format(PyExc_TypeError, - "%%%c format: a number is required, " - "not %.200s", - type, Py_TYPE(v)->tp_name); + switch(type) + { + case 'o': + case 'x': + case 'X': + PyErr_Format(PyExc_TypeError, + "%%%c format: an integer is required, " + "not %.200s", + type, Py_TYPE(v)->tp_name); + break; + default: + PyErr_Format(PyExc_TypeError, + "%%%c format: a number is required, " + "not %.200s", + type, Py_TYPE(v)->tp_name); + break; + } return -1; } |
