py/obj: Issue a warning when str and bytes objects are compared.
Something like: if foo == "bar": will be always false if foo is b"bar". In CPython, warning is issued if interpreter is started as "python3 -b". In MicroPython, MICROPY_PY_STR_BYTES_CMP_WARN setting controls it.
This commit is contained in:
parent
26b7d8a7be
commit
707cae7494
@ -590,6 +590,11 @@ typedef double mp_float_t;
|
|||||||
#define MICROPY_PY_ASYNC_AWAIT (1)
|
#define MICROPY_PY_ASYNC_AWAIT (1)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// Support for async/await/async for/async with
|
||||||
|
#ifndef MICROPY_PY_STR_BYTES_CMP_WARN
|
||||||
|
#define MICROPY_PY_STR_BYTES_CMP_WARN (0)
|
||||||
|
#endif
|
||||||
|
|
||||||
// Whether str object is proper unicode
|
// Whether str object is proper unicode
|
||||||
#ifndef MICROPY_PY_BUILTINS_STR_UNICODE
|
#ifndef MICROPY_PY_BUILTINS_STR_UNICODE
|
||||||
#define MICROPY_PY_BUILTINS_STR_UNICODE (0)
|
#define MICROPY_PY_BUILTINS_STR_UNICODE (0)
|
||||||
|
8
py/obj.c
8
py/obj.c
@ -192,10 +192,16 @@ bool mp_obj_equal(mp_obj_t o1, mp_obj_t o2) {
|
|||||||
return mp_obj_str_equal(o1, o2);
|
return mp_obj_str_equal(o1, o2);
|
||||||
} else {
|
} else {
|
||||||
// a string is never equal to anything else
|
// a string is never equal to anything else
|
||||||
return false;
|
goto str_cmp_err;
|
||||||
}
|
}
|
||||||
} else if (MP_OBJ_IS_STR(o2)) {
|
} else if (MP_OBJ_IS_STR(o2)) {
|
||||||
// o1 is not a string (else caught above), so the objects are not equal
|
// o1 is not a string (else caught above), so the objects are not equal
|
||||||
|
str_cmp_err:
|
||||||
|
#if MICROPY_PY_STR_BYTES_CMP_WARN
|
||||||
|
if (MP_OBJ_IS_TYPE(o1, &mp_type_bytes) || MP_OBJ_IS_TYPE(o2, &mp_type_bytes)) {
|
||||||
|
mp_warning("BytesWarning: Comparison between bytes and str");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user