summaryrefslogtreecommitdiffstatshomepage
path: root/py
diff options
context:
space:
mode:
Diffstat (limited to 'py')
-rw-r--r--py/moduerrno.c9
-rw-r--r--py/mperrno.h6
-rw-r--r--py/objexcept.c5
3 files changed, 20 insertions, 0 deletions
diff --git a/py/moduerrno.c b/py/moduerrno.c
index 826f52d2ea..0b543a1934 100644
--- a/py/moduerrno.c
+++ b/py/moduerrno.c
@@ -89,4 +89,13 @@ const mp_obj_module_t mp_module_uerrno = {
.globals = (mp_obj_dict_t*)&mp_module_uerrno_globals,
};
+mp_obj_t mp_errno_to_str(mp_obj_t errno_val) {
+ mp_map_elem_t *elem = mp_map_lookup((mp_map_t*)&errorcode_dict.map, errno_val, MP_MAP_LOOKUP);
+ if (elem == NULL) {
+ return errno_val;
+ } else {
+ return elem->value;
+ }
+}
+
#endif //MICROPY_PY_UERRNO
diff --git a/py/mperrno.h b/py/mperrno.h
index da541284c6..2dbb7b0a82 100644
--- a/py/mperrno.h
+++ b/py/mperrno.h
@@ -134,4 +134,10 @@
#endif
+#if MICROPY_PY_UERRNO
+mp_obj_t mp_errno_to_str(mp_obj_t errno_val);
+#else
+static inline mp_obj_t mp_errno_to_str(mp_obj_t errno_val) { return errno_val; }
+#endif
+
#endif // __MICROPY_INCLUDED_PY_MPERRNO_H__
diff --git a/py/objexcept.c b/py/objexcept.c
index adf17b08d0..4c1da1b387 100644
--- a/py/objexcept.c
+++ b/py/objexcept.c
@@ -36,6 +36,7 @@
#include "py/objtype.h"
#include "py/runtime.h"
#include "py/gc.h"
+#include "py/mperrno.h"
// Instance of MemoryError exception - needed by mp_malloc_fail
const mp_obj_exception_t mp_const_MemoryError_obj = {{&mp_type_MemoryError}, 0, 0, NULL, (mp_obj_tuple_t*)&mp_const_empty_tuple_obj};
@@ -288,6 +289,10 @@ mp_obj_t mp_obj_new_exception(const mp_obj_type_t *exc_type) {
// "Optimized" version for common(?) case of having 1 exception arg
mp_obj_t mp_obj_new_exception_arg1(const mp_obj_type_t *exc_type, mp_obj_t arg) {
+ // try to provide a nice string instead of numeric value for errno's
+ if (exc_type == &mp_type_OSError && MP_OBJ_IS_SMALL_INT(arg)) {
+ arg = mp_errno_to_str(arg);
+ }
return mp_obj_new_exception_args(exc_type, 1, &arg);
}