micropython/tests/cpydiff
Damien George 3c4bfd1dec 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>
2021-04-23 22:03:46 +10:00
..
modules tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
modules2/subpkg tests/cpydiff/core_import_split_ns_pkgs: Test for split namespace packages. 2017-05-03 17:16:19 +03:00
modules3 tests/cpydiff: Add cpydiff test for __all__ used in imported package. 2020-05-02 17:41:04 +10:00
builtin_next_arg2.py tests/cpydiff: Fix markup where "`" (xref) was used instead of "``" (code). 2017-12-03 15:32:09 +02:00
core_class_delnotimpl.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
core_class_mro.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
core_class_supermultiple.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
core_class_superproperty.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
core_function_argcount.py tests/cpydiff/core_arguments: Move under Functions subsection. 2017-07-09 13:36:28 +03:00
core_function_userattr.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
core_generator_noexit.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
core_import_all.py tests/cpydiff: Add cpydiff test for __all__ used in imported package. 2020-05-02 17:41:04 +10:00
core_import_path.py tests/cpydiff/core_import_path: Test showing difference in package.__path__. 2017-05-03 12:22:53 +03:00
core_import_prereg.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
core_import_split_ns_pkgs.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
core_locals.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
core_locals_eval.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
modules_array_containment.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
modules_array_deletion.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
modules_array_subscrstep.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
modules_deque.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
modules_json_nonserializable.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
modules_os_environ.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
modules_os_getenv.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
modules_os_getenv_argcount.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
modules_struct_fewargs.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
modules_struct_manyargs.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
modules_sys_stdassign.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
syntax_assign_expr.py tests/cpydiff: Add CPy diff test for assignment expression behaviour. 2020-06-16 22:06:47 +10:00
syntax_spaces.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
syntax_unicode_nameesc.py tests/cpydiff: Add initial set of tests for uPy-CPython differences. 2017-02-20 16:50:34 +11:00
types_bytearray_sliceassign.py tests/cpydiff: Add initial set of tests for uPy-CPython differences. 2017-02-20 16:50:34 +11:00
types_bytes_format.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
types_bytes_keywords.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
types_bytes_subscrstep.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
types_dict_keys_set.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
types_exception_attrs.py py/objexcept: Support errno attribute on OSError exceptions. 2021-04-23 22:03:46 +10:00
types_exception_chaining.py tests/cpydiff: Add initial set of tests for uPy-CPython differences. 2017-02-20 16:50:34 +11:00
types_exception_instancevar.py tests/cpydiff/: Improve wording, add more workarounds. 2017-07-09 14:33:55 +03:00
types_exception_loops.py tests/cpydiff/: Improve wording, add more workarounds. 2017-07-09 14:33:55 +03:00
types_exception_subclassinit.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
types_float_rounding.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
types_int_subclassconv.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
types_list_delete_subscrstep.py tests/cpydiff/: Improve wording, add more workarounds. 2017-07-09 14:33:55 +03:00
types_list_store_noniter.py tests/cpydiff: Add a test for storing iterable to a list slice. 2017-02-20 17:22:12 +11:00
types_list_store_subscrstep.py tests/cpydiff/: Improve wording, add more workarounds. 2017-07-09 14:33:55 +03:00
types_str_endswith.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
types_str_formatsubscr.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
types_str_keywords.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
types_str_ljust_rjust.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
types_str_rsplitnone.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
types_str_subscrstep.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
types_tuple_subscrstep.py tests/cpydiff: Add initial set of tests for uPy-CPython differences. 2017-02-20 16:50:34 +11:00