blob: 917ccf42f1e16d94533f7ed7d80b32308d275211 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
# Test that we can raise and catch (preallocated) exception
# without memory allocation.
try:
import micropython
micropython.heap_lock
except (ImportError, AttributeError):
print("SKIP")
raise SystemExit
e = ValueError("error")
def func():
micropython.heap_lock()
try:
# This works as is because traceback is not allocated
# if not possible (heap is locked, no memory). If heap
# is not locked, this would allocate a traceback entry.
# To avoid that, traceback should be warmed up (by raising
# it once after creation) and then cleared before each
# raise with:
# e.__traceback__ = None
raise e
except Exception as e2:
print(e2)
micropython.heap_unlock()
func()
print("ok")
|