summaryrefslogtreecommitdiff
path: root/tests/basics/exception1.py
diff options
context:
space:
mode:
authorDamien George <damien@micropython.org>2021-04-20 17:11:13 +1000
committerDamien George <damien@micropython.org>2021-04-23 22:03:46 +1000
commit3c4bfd1dec28ffbefc6379dedeaa24feaa2ef373 (patch)
tree344aaa8b062183d31447235c95549e561dc4f046 /tests/basics/exception1.py
parent5669a6095444e079af5e38b2b04ca5ff2e7c11f9 (diff)
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/basics/exception1.py')
-rw-r--r--tests/basics/exception1.py5
1 files changed, 5 insertions, 0 deletions
diff --git a/tests/basics/exception1.py b/tests/basics/exception1.py
index d83764cb9..a0ca8a74e 100644
--- a/tests/basics/exception1.py
+++ b/tests/basics/exception1.py
@@ -1,3 +1,5 @@
+# test basic properties of exceptions
+
print(repr(IndexError()))
print(str(IndexError()))
@@ -12,3 +14,6 @@ s = StopIteration()
print(s.value)
s = StopIteration(1, 2, 3)
print(s.value)
+
+print(OSError().errno)
+print(OSError(1, "msg").errno)