diff options
author | Damien George <damien@micropython.org> | 2021-04-20 17:11:13 +1000 |
---|---|---|
committer | Damien George <damien@micropython.org> | 2021-04-23 22:03:46 +1000 |
commit | 3c4bfd1dec28ffbefc6379dedeaa24feaa2ef373 (patch) | |
tree | 344aaa8b062183d31447235c95549e561dc4f046 /tests/esp32/esp32_nvs.py | |
parent | 5669a6095444e079af5e38b2b04ca5ff2e7c11f9 (diff) | |
download | micropython-3c4bfd1dec28ffbefc6379dedeaa24feaa2ef373.tar.gz micropython-3c4bfd1dec28ffbefc6379dedeaa24feaa2ef373.zip |
py/objexcept: Support errno attribute on OSError exceptions.
This commit adds the errno attribute to exceptions, so code can retrieve
errno codes from an OSError using exc.errno.
The implementation here simply lets `errno` (and the existing `value`)
attributes work on any exception instance (they both alias args[0]). This
is for efficiency and to keep code size down. The pros and cons of this
are:
Pros:
- more compatible with CPython, less difference to document and learn
- OSError().errno will correctly return None, whereas the current way of
doing it via OSError().args[0] will raise an IndexError
- it reduces code size on most bare-metal ports (because they already have
the errno qstr)
- for Python code that uses exc.errno the generated bytecode is 2 bytes
smaller and more efficient to execute (compared with exc.args[0]); so
bytecode loaded to RAM saves 2 bytes RAM for each use of this attribute,
and bytecode that is frozen saves 2 bytes flash/ROM for each use
- it's easier/shorter to type, and saves 2 bytes of space in .py files that
use it (for each use)
Cons:
- increases code size by 4-8 bytes on minimal ports that don't already have
the `errno` qstr
- all exceptions now have .errno and .value attributes (a cpydiff test is
added to address this)
See also #2407.
Signed-off-by: Damien George <damien@micropython.org>
Diffstat (limited to 'tests/esp32/esp32_nvs.py')
0 files changed, 0 insertions, 0 deletions