py/objstr: Use better msg in bad implicit str/bytes conversion exception

Instead of always reporting some object cannot be implicitly be converted
to a 'str', even when it is a 'bytes' object, adjust the logic so that
when trying to convert str to bytes it is shown like that.
This will still report bad implicit conversion from e.g. 'int to bytes'
as 'int to str' but it will not result in the confusing
'can't convert 'str' object to str implicitly' anymore for calls like
b'somestring'.count('a').
This commit is contained in:
stijn 2017-03-15 12:17:38 +01:00 committed by Damien George
parent 9b80a1e3e9
commit bf29fe2e13
1 changed files with 3 additions and 2 deletions

View File

@ -2065,9 +2065,10 @@ STATIC void bad_implicit_conversion(mp_obj_t self_in) {
if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) { if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
mp_raise_TypeError("can't convert to str implicitly"); mp_raise_TypeError("can't convert to str implicitly");
} else { } else {
const qstr src_name = mp_obj_get_type(self_in)->name;
nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_TypeError, nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_TypeError,
"can't convert '%s' object to str implicitly", "can't convert '%q' object to %q implicitly",
mp_obj_get_type_str(self_in))); src_name, src_name == MP_QSTR_str ? MP_QSTR_bytes : MP_QSTR_str));
} }
} }