diff --git a/tests/basics/array1.py b/tests/basics/array1.py
index 43f775b7978766046e80519749f1ec92ae7572a7..bad879035c2d04db0f356ffe0b6a977f8d15f456 100644
--- a/tests/basics/array1.py
+++ b/tests/basics/array1.py
@@ -1,9 +1,8 @@
 try:
     import array
 except ImportError:
-    import sys
     print("SKIP")
-    sys.exit()
+    raise SystemExit
 
 a = array.array('B', [1, 2, 3])
 print(a, len(a))
diff --git a/tests/basics/array_add.py b/tests/basics/array_add.py
index 41cd77b428e47f9850bf67862993dcab744b3deb..76ce59f761e0608a2bc97fbbed7cad86ce73f3d8 100644
--- a/tests/basics/array_add.py
+++ b/tests/basics/array_add.py
@@ -2,9 +2,8 @@
 try:
     import array
 except ImportError:
-    import sys
     print("SKIP")
-    sys.exit()
+    raise SystemExit
 
 a1 = array.array('I', [1])
 a2 = array.array('I', [2])
diff --git a/tests/basics/array_construct.py b/tests/basics/array_construct.py
index cafa57784c577622acf2be554ac0b918fdab5bda..2221de99068c2689faa3b8fac34835d0b8580bf0 100644
--- a/tests/basics/array_construct.py
+++ b/tests/basics/array_construct.py
@@ -3,9 +3,8 @@
 try:
     from array import array
 except ImportError:
-    import sys
     print("SKIP")
-    sys.exit()
+    raise SystemExit
 
 # tuple, list
 print(array('b', (1, 2)))
diff --git a/tests/basics/array_construct2.py b/tests/basics/array_construct2.py
index d1c1a6c70bdb2744c1e13c339a88a1a05b07d496..c305b7f011d1f704ad0dddf74912e30f62c10f6c 100644
--- a/tests/basics/array_construct2.py
+++ b/tests/basics/array_construct2.py
@@ -1,9 +1,8 @@
 try:
     from array import array
 except ImportError:
-    import sys
     print("SKIP")
-    sys.exit()
+    raise SystemExit
 
 # construct from something with unknown length (requires generators)
 print(array('i', (i for i in range(10))))
diff --git a/tests/basics/array_construct_endian.py b/tests/basics/array_construct_endian.py
index bf34b05d15d2007be7fd3fc889f9f4e0b0e193d7..990d7b1ea039b63841c62fdf14d6a078766ff2a4 100644
--- a/tests/basics/array_construct_endian.py
+++ b/tests/basics/array_construct_endian.py
@@ -3,9 +3,8 @@
 try:
     from array import array
 except ImportError:
-    import sys
     print("SKIP")
-    sys.exit()
+    raise SystemExit
 
 # raw copy from bytes, bytearray
 print(array('h', b'12'))
diff --git a/tests/basics/array_intbig.py b/tests/basics/array_intbig.py
index 4a3b2a0d4261c23dcb8aaa8d96dce05c37f44e8f..5702a8ae635384eec11ac5297e7b5c3a147ba693 100644
--- a/tests/basics/array_intbig.py
+++ b/tests/basics/array_intbig.py
@@ -3,9 +3,8 @@
 try:
     from array import array
 except ImportError:
-    import sys
     print("SKIP")
-    sys.exit()
+    raise SystemExit
 
 print(array('L', [0, 2**32-1]))
 print(array('l', [-2**31, 0, 2**31-1]))
diff --git a/tests/basics/array_micropython.py b/tests/basics/array_micropython.py
index 0c1df0923b5dcf15c2d984b71d298e0ad3a94b0b..e26ad7ae9693e86814391471d30fa982c329e59f 100644
--- a/tests/basics/array_micropython.py
+++ b/tests/basics/array_micropython.py
@@ -2,9 +2,8 @@
 try:
     import array
 except ImportError:
-    import sys
     print("SKIP")
-    sys.exit()
+    raise SystemExit
 
 # arrays of objects
 a = array.array('O')
diff --git a/tests/basics/attrtuple1.py b/tests/basics/attrtuple1.py
index 597bfc2a32c49af55f86afa7bde0780546575511..78a0fbed1b73aa13d05fd1037a4bac665873ce36 100644
--- a/tests/basics/attrtuple1.py
+++ b/tests/basics/attrtuple1.py
@@ -8,9 +8,8 @@ t = sys.implementation
 try:
     t.name
 except AttributeError:
-    import sys
     print("SKIP")
-    sys.exit()
+    raise SystemExit
 
 
 # test printing of attrtuple
diff --git a/tests/basics/builtin_delattr.py b/tests/basics/builtin_delattr.py
index 9b38837e44ddf801b104146b4174410e41ef737a..65bd0f210d59088d8fce85f66c26f31b79897fc1 100644
--- a/tests/basics/builtin_delattr.py
+++ b/tests/basics/builtin_delattr.py
@@ -2,9 +2,8 @@
 try:
     delattr
 except:
-    import sys
     print("SKIP")
-    sys.exit()
+    raise SystemExit
 
 class A: pass
 a = A()
diff --git a/tests/basics/builtin_help.py b/tests/basics/builtin_help.py
index d554f308d99b00e1beb618e655dfab46d64b806b..6ec39653fe9931877159a42f2b4ec40fce86d99a 100644
--- a/tests/basics/builtin_help.py
+++ b/tests/basics/builtin_help.py
@@ -4,8 +4,7 @@ try:
     help
 except NameError:
     print("SKIP")
-    import sys
-    sys.exit()
+    raise SystemExit
 
 help() # no args
 help(help) # help for a function
diff --git a/tests/basics/builtin_minmax.py b/tests/basics/builtin_minmax.py
index a925b3fe9253509b8c3fb454b3f3692ff42e3968..184398e641d28d9426eb549e4a3714deb8878aab 100644
--- a/tests/basics/builtin_minmax.py
+++ b/tests/basics/builtin_minmax.py
@@ -3,9 +3,8 @@ try:
     min
     max
 except:
-    import sys
     print("SKIP")
-    sys.exit()
+    raise SystemExit
 
 print(min(0,1))
 print(min(1,0))
diff --git a/tests/basics/builtin_override.py b/tests/basics/builtin_override.py
index f3632e59a7cb187f5769e44af66d561c47b322b1..9f91341edd8aded6902ca53959cd1ff56f22117a 100644
--- a/tests/basics/builtin_override.py
+++ b/tests/basics/builtin_override.py
@@ -6,9 +6,8 @@ import builtins
 try:
     builtins.abs = lambda x: x + 1
 except AttributeError:
-    import sys
     print("SKIP")
-    sys.exit()
+    raise SystemExit
 
 print(abs(1))
 
diff --git a/tests/basics/builtin_pow3.py b/tests/basics/builtin_pow3.py
index dec7253bbd4958fa7398e4c835a046c25b3acd6b..69b57e54849d9eeb5dcd53b805a466b027311f33 100644
--- a/tests/basics/builtin_pow3.py
+++ b/tests/basics/builtin_pow3.py
@@ -4,9 +4,8 @@
 try:
     print(pow(3, 4, 7))
 except NotImplementedError:
-    import sys
     print("SKIP")
-    sys.exit()
+    raise SystemExit
 
 # 3 arg pow is defined to only work on integers
 try:
diff --git a/tests/basics/builtin_pow3_intbig.py b/tests/basics/builtin_pow3_intbig.py
index 9f482cbde7642bc45347fe67229f0cf2c5a88dd5..bedc8b36b7edd885ecf9da565724d18f1e87d1d8 100644
--- a/tests/basics/builtin_pow3_intbig.py
+++ b/tests/basics/builtin_pow3_intbig.py
@@ -4,9 +4,8 @@
 try:
     print(pow(3, 4, 7))
 except NotImplementedError:
-    import sys
     print("SKIP")
-    sys.exit()
+    raise SystemExit
 
 print(pow(555557, 1000002, 1000003))
 
diff --git a/tests/basics/builtin_property.py b/tests/basics/builtin_property.py
index ff4ff073c4272c37978046bdfc33b02822387383..89c3d49364e25a62a27d971f99abc848273f7149 100644
--- a/tests/basics/builtin_property.py
+++ b/tests/basics/builtin_property.py
@@ -2,9 +2,8 @@
 try:
     property
 except:
-    import sys
     print("SKIP")
-    sys.exit()
+    raise SystemExit
 
 # create a property object explicitly
 property()
diff --git a/tests/basics/builtin_range_attrs.py b/tests/basics/builtin_range_attrs.py
index 9327c802a5d47c400a6de576da02a7b664f152c5..05d666d1393ba1e96158998065ec94de7be72506 100644
--- a/tests/basics/builtin_range_attrs.py
+++ b/tests/basics/builtin_range_attrs.py
@@ -3,9 +3,8 @@
 try:
     range(0).start
 except AttributeError:
-    import sys
     print("SKIP")
-    sys.exit()
+    raise SystemExit
 
 # attrs
 print(range(1, 2, 3).start)
diff --git a/tests/basics/builtin_reversed.py b/tests/basics/builtin_reversed.py
index 59e9c78219613587fee7f1e5d04491deebbd51eb..f43505a8bf4af2e55342dede6632c4930f4a1330 100644
--- a/tests/basics/builtin_reversed.py
+++ b/tests/basics/builtin_reversed.py
@@ -2,9 +2,8 @@
 try:
     reversed
 except:
-    import sys
     print("SKIP")
-    sys.exit()
+    raise SystemExit
 
 # list
 print(list(reversed([])))
diff --git a/tests/basics/builtin_sorted.py b/tests/basics/builtin_sorted.py
index 68855b61bab7f85695a5b52312067872e87f33fd..6435f86d0ebea4e140fba17157ac8d45208889ff 100644
--- a/tests/basics/builtin_sorted.py
+++ b/tests/basics/builtin_sorted.py
@@ -3,9 +3,8 @@ try:
     sorted
     set
 except:
-    import sys
     print("SKIP")
-    sys.exit()
+    raise SystemExit
 
 print(sorted(set(range(100))))
 print(sorted(set(range(100)), key=lambda x: x + 100*(x % 2)))
diff --git a/tests/basics/bytearray_construct_array.py b/tests/basics/bytearray_construct_array.py
index 6d45cafda312139e2bc66c1c84bb052a549d4fbf..bde5fa08bd2c284c9d76130075e2bd49c0cf2e8f 100644
--- a/tests/basics/bytearray_construct_array.py
+++ b/tests/basics/bytearray_construct_array.py
@@ -2,9 +2,8 @@
 try:
     from array import array
 except ImportError:
-    import sys
     print("SKIP")
-    sys.exit()
+    raise SystemExit
 
 # arrays
 print(bytearray(array('b', [1, 2])))
diff --git a/tests/basics/bytearray_construct_endian.py b/tests/basics/bytearray_construct_endian.py
index f68f9b89d1ebfe3d31241c1bbbc95323d19af851..0002f19c5f9ba4e537a857f871f861d06ca17ce9 100644
--- a/tests/basics/bytearray_construct_endian.py
+++ b/tests/basics/bytearray_construct_endian.py
@@ -2,9 +2,8 @@
 try:
     from array import array
 except ImportError:
-    import sys
     print("SKIP")
-    sys.exit()
+    raise SystemExit
 
 # arrays
 print(bytearray(array('h', [1, 2])))
diff --git a/tests/basics/bytearray_slice_assign.py b/tests/basics/bytearray_slice_assign.py
index c4b5c43e33c1e458c5d0ceb6ff5805ff6b74e0b5..48f5938a582f2b0d4f0b0982429fcf71e571bd76 100644
--- a/tests/basics/bytearray_slice_assign.py
+++ b/tests/basics/bytearray_slice_assign.py
@@ -2,8 +2,7 @@ try:
     bytearray()[:] = bytearray()
 except TypeError:
     print("SKIP")
-    import sys
-    sys.exit()
+    raise SystemExit
 
 # test slices; only 2 argument version supported by Micro Python at the moment
 x = bytearray(range(10))
diff --git a/tests/basics/bytes_add_array.py b/tests/basics/bytes_add_array.py
index 2b8cbccef59543a7bffd268915dffb279daf8302..b17556d83cbafea36a4b9e843bfb4d9222f8fa00 100644
--- a/tests/basics/bytes_add_array.py
+++ b/tests/basics/bytes_add_array.py
@@ -2,9 +2,8 @@
 try:
     import array
 except ImportError:
-    import sys
     print("SKIP")
-    sys.exit()
+    raise SystemExit
 
 # should be byteorder-neutral
 print(b"123" + array.array('h', [0x1515]))
diff --git a/tests/basics/bytes_add_endian.py b/tests/basics/bytes_add_endian.py
index 1bbd0f2c3a5df5c21d10d32ccfb6e40ceb4003dd..8cfffa7b6ace27ea36b92700257339d9d506a8d3 100644
--- a/tests/basics/bytes_add_endian.py
+++ b/tests/basics/bytes_add_endian.py
@@ -2,8 +2,7 @@
 try:
     import array
 except ImportError:
-    import sys
     print("SKIP")
-    sys.exit()
+    raise SystemExit
 
 print(b"123" + array.array('i', [1]))
diff --git a/tests/basics/bytes_compare_array.py b/tests/basics/bytes_compare_array.py
index ad41d1d375798d53be8b7a74776396d591940fac..ad378de70c56bb5146ca0e32375ecee222ddfe7c 100644
--- a/tests/basics/bytes_compare_array.py
+++ b/tests/basics/bytes_compare_array.py
@@ -1,9 +1,8 @@
 try:
     import array
 except ImportError:
-    import sys
     print("SKIP")
-    sys.exit()
+    raise SystemExit
 
 print(array.array('b', [1, 2]) in b'\x01\x02\x03')
 # CPython gives False here
diff --git a/tests/basics/bytes_construct_array.py b/tests/basics/bytes_construct_array.py
index 72c2d0c5851bb89efaaf0e585a31561112403d11..453eb59010392e8dd3119c2ee0618d152bbee8e4 100644
--- a/tests/basics/bytes_construct_array.py
+++ b/tests/basics/bytes_construct_array.py
@@ -2,9 +2,8 @@
 try:
     from array import array
 except ImportError:
-    import sys
     print("SKIP")
-    sys.exit()
+    raise SystemExit
 
 # arrays
 print(bytes(array('b', [1, 2])))
diff --git a/tests/basics/bytes_construct_endian.py b/tests/basics/bytes_construct_endian.py
index 77e0eaaa563653eea3c1fa6b6abf15b093dd1a1f..cf1a9f408fa8d0daa209aa4ba914b30d47205be8 100644
--- a/tests/basics/bytes_construct_endian.py
+++ b/tests/basics/bytes_construct_endian.py
@@ -3,9 +3,8 @@
 try:
     from array import array
 except ImportError:
-    import sys
     print("SKIP")
-    sys.exit()
+    raise SystemExit
 
 # arrays
 print(bytes(array('h', [1, 2])))
diff --git a/tests/basics/bytes_partition.py b/tests/basics/bytes_partition.py
index 7d3ffaaaaadeaed715bdac09fbacc2e125d13591..5b503f54438f79b122137fa8414074fa05973d91 100644
--- a/tests/basics/bytes_partition.py
+++ b/tests/basics/bytes_partition.py
@@ -2,8 +2,7 @@ try:
     str.partition
 except AttributeError:
     print("SKIP")
-    import sys
-    sys.exit()
+    raise SystemExit
 
 print(b"asdf".partition(b'g'))
 print(b"asdf".partition(b'a'))
diff --git a/tests/basics/class_delattr_setattr.py b/tests/basics/class_delattr_setattr.py
index 0d061aee6869b1a48b610601f59d11986ceeb543..190b4875b90bcb9b1b627c774d775ac3d202ce77 100644
--- a/tests/basics/class_delattr_setattr.py
+++ b/tests/basics/class_delattr_setattr.py
@@ -6,9 +6,8 @@ try:
         def __delattr__(self, attr): pass
     del Test().noexist
 except AttributeError:
-    import sys
     print('SKIP')
-    sys.exit()
+    raise SystemExit
 
 # this class just prints the calls to see if they were executed
 class A():
diff --git a/tests/basics/class_descriptor.py b/tests/basics/class_descriptor.py
index 7f295f071eed4511db8aa5c3abef2b0526a62591..eb88ba7b9caecaf6aa5fa707d1523087db735b62 100644
--- a/tests/basics/class_descriptor.py
+++ b/tests/basics/class_descriptor.py
@@ -21,9 +21,8 @@ m = Main()
 try:
     m.__class__
 except AttributeError:
-    import sys
     print("SKIP")
-    sys.exit()
+    raise SystemExit
 
 r = m.Forward
 if 'Descriptor' in repr(r.__class__):
diff --git a/tests/basics/class_new.py b/tests/basics/class_new.py
index 0198456b24dab589df5dd424bccf13a7c3e30fc1..9a7072ad0341f903fb474b1ce22d2acb26a955a0 100644
--- a/tests/basics/class_new.py
+++ b/tests/basics/class_new.py
@@ -3,9 +3,8 @@ try:
     # nothing to test.
     object.__new__
 except AttributeError:
-    import sys
     print("SKIP")
-    sys.exit()
+    raise SystemExit
 class A:
     def __new__(cls):
         print("A.__new__")
diff --git a/tests/basics/class_store_class.py b/tests/basics/class_store_class.py
index 00a2915869f5645e16e3ac3b1ae3be775728c896..797f88f8526d8530a1c4694020df888cf3252014 100644
--- a/tests/basics/class_store_class.py
+++ b/tests/basics/class_store_class.py
@@ -8,9 +8,8 @@ except ImportError:
     try:
         from ucollections import namedtuple
     except ImportError:
-        import sys
         print("SKIP")
-        sys.exit()
+        raise SystemExit
 
 _DefragResultBase = namedtuple('DefragResult', [ 'foo', 'bar' ])
 
diff --git a/tests/basics/class_super_object.py b/tests/basics/class_super_object.py
index a841d34abbd677af82d3b84d61210a544d42bfd7..1fddbb38fd904ed4b44f1f51732291e24d4bb3b9 100644
--- a/tests/basics/class_super_object.py
+++ b/tests/basics/class_super_object.py
@@ -4,9 +4,8 @@ try:
     # nothing to test.
     object.__init__
 except AttributeError:
-    import sys
     print("SKIP")
-    sys.exit()
+    raise SystemExit
 
 class Test(object):
     def __init__(self):
diff --git a/tests/basics/dict_fromkeys2.py b/tests/basics/dict_fromkeys2.py
index 7ea0cc5b36d1b5277da65d19ff9df69ba8413fd7..dce1e8ef5af0c9bb4f081993d31feaec8db94668 100644
--- a/tests/basics/dict_fromkeys2.py
+++ b/tests/basics/dict_fromkeys2.py
@@ -1,9 +1,8 @@
 try:
     reversed
 except:
-    import sys
     print("SKIP")
-    sys.exit()
+    raise SystemExit
 
 # argument to fromkeys has no __len__
 d = dict.fromkeys(reversed(range(1)))
diff --git a/tests/basics/enumerate.py b/tests/basics/enumerate.py
index 3cc1350a0f2deb7d17cb38bda11ac1e8d3f1113e..4f8239bf723da1ad4f924a9a8eeae1f5f5a58f4b 100644
--- a/tests/basics/enumerate.py
+++ b/tests/basics/enumerate.py
@@ -1,9 +1,8 @@
 try:
     enumerate
 except:
-    import sys
     print("SKIP")
-    sys.exit()
+    raise SystemExit
 
 print(list(enumerate([])))
 print(list(enumerate([1, 2, 3])))
diff --git a/tests/basics/errno1.py b/tests/basics/errno1.py
index eae1bbe1b4f35892d50bbc31d6ae3f35869fe6e0..63930b767ff8e0ebfe9868dc841a3d38aaf5b6fd 100644
--- a/tests/basics/errno1.py
+++ b/tests/basics/errno1.py
@@ -4,8 +4,7 @@ try:
     import uerrno
 except ImportError:
     print("SKIP")
-    import sys
-    sys.exit()
+    raise SystemExit
 
 # check that constants exist and are integers
 print(type(uerrno.EIO))
diff --git a/tests/basics/filter.py b/tests/basics/filter.py
index d0b36733c3e337cecb8a57e9cd4e9d3481d28a34..c6d97cf9b58a3eff41761c80e05fdcbfd22cb99b 100644
--- a/tests/basics/filter.py
+++ b/tests/basics/filter.py
@@ -1,9 +1,8 @@
 try:
     filter
 except:
-    import sys
     print("SKIP")
-    sys.exit()
+    raise SystemExit
 
 print(list(filter(lambda x: x & 1, range(-3, 4))))
 print(list(filter(None, range(-3, 4))))
diff --git a/tests/basics/frozenset1.py b/tests/basics/frozenset1.py
index 7a4a335401290c4f4166e9b68371e56d01ffab15..7bec24c29578f42d8185ea66257c51e9820ae24b 100644
--- a/tests/basics/frozenset1.py
+++ b/tests/basics/frozenset1.py
@@ -4,8 +4,7 @@ try:
     frozenset
 except NameError:
     print("SKIP")
-    import sys
-    sys.exit()
+    raise SystemExit
 
 s = frozenset()
 print(s)
diff --git a/tests/basics/frozenset_add.py b/tests/basics/frozenset_add.py
index 415a8c2e1339abda36b9b2a451402a841bc2026c..fe24fbaf1dd26ce47a0cd7b9b0547b2e32d605dc 100644
--- a/tests/basics/frozenset_add.py
+++ b/tests/basics/frozenset_add.py
@@ -2,8 +2,7 @@ try:
     frozenset
 except NameError:
     print("SKIP")
-    import sys
-    sys.exit()
+    raise SystemExit
 
 s = frozenset({1, 2, 3, 4})
 try:
diff --git a/tests/basics/frozenset_binop.py b/tests/basics/frozenset_binop.py
index 5cc07e9e1514321189998cab8373dc64d5ddfb86..61af07a23931ca8feb401fd4c41ffdb2bfb32ced 100644
--- a/tests/basics/frozenset_binop.py
+++ b/tests/basics/frozenset_binop.py
@@ -2,8 +2,7 @@ try:
     frozenset
 except NameError:
     print("SKIP")
-    import sys
-    sys.exit()
+    raise SystemExit
 
 sets = [
     frozenset(), frozenset({1}), frozenset({1, 2}), frozenset({1, 2, 3}), frozenset({2, 3}),
diff --git a/tests/basics/frozenset_copy.py b/tests/basics/frozenset_copy.py
index 92e115d346b627ded3d833e2327d203e93d166eb..c90f541a1311a1894bd153a3e23298dc298f2be2 100644
--- a/tests/basics/frozenset_copy.py
+++ b/tests/basics/frozenset_copy.py
@@ -2,8 +2,7 @@ try:
     frozenset
 except NameError:
     print("SKIP")
-    import sys
-    sys.exit()
+    raise SystemExit
 
 s = frozenset({1, 2, 3, 4})
 t = s.copy()
diff --git a/tests/basics/frozenset_difference.py b/tests/basics/frozenset_difference.py
index 3d142f9595da83c29d3e2fa4f16f0bd05171f3ab..bc8b9c21cc6684eb84b192ec77dfaa14f856dc82 100644
--- a/tests/basics/frozenset_difference.py
+++ b/tests/basics/frozenset_difference.py
@@ -2,8 +2,7 @@ try:
     frozenset
 except NameError:
     print("SKIP")
-    import sys
-    sys.exit()
+    raise SystemExit
 
 l = [1, 2, 3, 4]
 s = frozenset(l)
diff --git a/tests/basics/frozenset_set.py b/tests/basics/frozenset_set.py
index b334694b5bd0e90d056ae8e32a6af61b7831a13c..3bf456acfd70f54865bbece004f1cd670806a6fb 100644
--- a/tests/basics/frozenset_set.py
+++ b/tests/basics/frozenset_set.py
@@ -2,8 +2,7 @@ try:
     frozenset
 except NameError:
     print("SKIP")
-    import sys
-    sys.exit()
+    raise SystemExit
 
 # Examples from https://docs.python.org/3/library/stdtypes.html#set
 # "Instances of set are compared to instances of frozenset based on their
diff --git a/tests/basics/fun_error2.py b/tests/basics/fun_error2.py
index c4d2c0b64d6715e1049ea65d2bcfc708193dfee5..2a00396e65d84e7d1dbe7f249d40c2155d75ee1a 100644
--- a/tests/basics/fun_error2.py
+++ b/tests/basics/fun_error2.py
@@ -3,8 +3,7 @@ try:
     enumerate
 except:
     print("SKIP")
-    import sys
-    sys.exit()
+    raise SystemExit
 
 def test_exc(code, exc):
     try:
diff --git a/tests/basics/gc1.py b/tests/basics/gc1.py
index be6c6faed2125ba6c0c6996f91976fce6aeec238..dcbe0bfcf6678ed97c9b5ed2c026a9d4c5f640a2 100644
--- a/tests/basics/gc1.py
+++ b/tests/basics/gc1.py
@@ -4,8 +4,7 @@ try:
     import gc
 except ImportError:
     print("SKIP")
-    import sys
-    sys.exit()
+    raise SystemExit
 
 print(gc.isenabled())
 gc.disable()
diff --git a/tests/basics/memoryview1.py b/tests/basics/memoryview1.py
index a771acdda945367b5343227f41cca3595c8bc468..c4cc6ffab726ac84b9518e96df211860caebca54 100644
--- a/tests/basics/memoryview1.py
+++ b/tests/basics/memoryview1.py
@@ -2,9 +2,8 @@
 try:
     memoryview
 except:
-    import sys
     print("SKIP")
-    sys.exit()
+    raise SystemExit
 
 # test reading from bytes
 b = b'1234'
diff --git a/tests/basics/memoryview2.py b/tests/basics/memoryview2.py
index 4b5af852b2645660036e754643adb5b4516319b7..06a7be59fdbd18c775cdf9b547da0712d1b148ba 100644
--- a/tests/basics/memoryview2.py
+++ b/tests/basics/memoryview2.py
@@ -3,9 +3,8 @@ try:
     from array import array
     memoryview
 except:
-    import sys
     print("SKIP")
-    sys.exit()
+    raise SystemExit
 
 print(list(memoryview(b'\x7f\x80\x81\xff')))
 print(list(memoryview(array('b', [0x7f, -0x80]))))
diff --git a/tests/basics/memoryview_gc.py b/tests/basics/memoryview_gc.py
index 9d4857e362822db94a818130e6b4c668cd9a8601..d366cbbb1540534b6e107756a0fe61db1d8abc38 100644
--- a/tests/basics/memoryview_gc.py
+++ b/tests/basics/memoryview_gc.py
@@ -2,9 +2,8 @@
 try:
     memoryview
 except:
-    import sys
     print("SKIP")
-    sys.exit()
+    raise SystemExit
 
 b = bytearray(10)
 m = memoryview(b)[1:]
diff --git a/tests/basics/memoryview_intbig.py b/tests/basics/memoryview_intbig.py
index 180f15d186e14c2468bdb629a6a48ecbac4c7746..a76d9cbec705e31804b15b362835cc5e06adf0aa 100644
--- a/tests/basics/memoryview_intbig.py
+++ b/tests/basics/memoryview_intbig.py
@@ -3,9 +3,8 @@ try:
     from array import array
     memoryview
 except:
-    import sys
     print("SKIP")
-    sys.exit()
+    raise SystemExit
 
 print(list(memoryview(array('i', [0x7f000000, -0x80000000]))))
 print(list(memoryview(array('I', [0x7f000000, 0x80000000, 0x81000000, 0xffffffff]))))
diff --git a/tests/basics/namedtuple1.py b/tests/basics/namedtuple1.py
index 70372f7cabadecee520f4f54811b0713eb93629f..b9a007240c675c72d38099be72a40b664455635f 100644
--- a/tests/basics/namedtuple1.py
+++ b/tests/basics/namedtuple1.py
@@ -4,9 +4,8 @@ try:
     except ImportError:
         from ucollections import namedtuple
 except ImportError:
-    import sys
     print("SKIP")
-    sys.exit()
+    raise SystemExit
 
 T = namedtuple("Tup", ["foo", "bar"])
 # CPython prints fully qualified name, what we don't bother to do so far
diff --git a/tests/basics/object_dict.py b/tests/basics/object_dict.py
index e6fb7b3d9c2f72b265f2b1c3f7390a6693903147..7bf7094e3a0e8a28d9ba46a5eaa34fc95f1d4be8 100644
--- a/tests/basics/object_dict.py
+++ b/tests/basics/object_dict.py
@@ -1,4 +1,3 @@
-import sys
 
 class Foo:
 
@@ -9,6 +8,6 @@ class Foo:
 o = Foo()
 if not hasattr(o, "__dict__"):
     print("SKIP")
-    sys.exit()
+    raise SystemExit
 
 print(o.__dict__ == {'a': 1, 'b': 'bar'})
diff --git a/tests/basics/object_new.py b/tests/basics/object_new.py
index 568feccda4803abfd92459ac5d055d786bff3b57..a9c9482cbbc1cb920ce01f5156234afcead6884a 100644
--- a/tests/basics/object_new.py
+++ b/tests/basics/object_new.py
@@ -7,9 +7,8 @@ try:
     # nothing to test.
     object.__new__
 except AttributeError:
-    import sys
     print("SKIP")
-    sys.exit()
+    raise SystemExit
 
 class Foo:
 
diff --git a/tests/basics/op_error_memoryview.py b/tests/basics/op_error_memoryview.py
index 658ededc80207833eacd832468f9a43d8a948be3..8d4403f777774e34d0c03f354954606716c228f0 100644
--- a/tests/basics/op_error_memoryview.py
+++ b/tests/basics/op_error_memoryview.py
@@ -2,9 +2,8 @@
 try:
     memoryview
 except:
-    import sys
     print("SKIP")
-    sys.exit()
+    raise SystemExit
 
 def test_exc(code, exc):
     try:
diff --git a/tests/basics/ordereddict1.py b/tests/basics/ordereddict1.py
index 7147968c58ce40ab9352c834bf952f613931f30b..d1633f0bb0e1f43810531aca95345df8d2360e08 100644
--- a/tests/basics/ordereddict1.py
+++ b/tests/basics/ordereddict1.py
@@ -5,8 +5,7 @@ except ImportError:
         from ucollections import OrderedDict
     except ImportError:
         print("SKIP")
-        import sys
-        sys.exit()
+        raise SystemExit
 
 d = OrderedDict([(10, 20), ("b", 100), (1, 2)])
 print(len(d))
diff --git a/tests/basics/ordereddict_eq.py b/tests/basics/ordereddict_eq.py
index 27466087721091b32bc8df9930292f8a363fc098..c69daf8802cc99c769a72ed8929762eb569b9f9e 100644
--- a/tests/basics/ordereddict_eq.py
+++ b/tests/basics/ordereddict_eq.py
@@ -5,8 +5,7 @@ except ImportError:
         from ucollections import OrderedDict
     except ImportError:
         print("SKIP")
-        import sys
-        sys.exit()
+        raise SystemExit
 
 x = OrderedDict()
 y = OrderedDict()
diff --git a/tests/basics/parser.py b/tests/basics/parser.py
index 8fb2a49bf908b998b5c1e021b51fe72f77ecb3e4..626b67ad7a941492c8f324aacb9793049c5d7ee3 100644
--- a/tests/basics/parser.py
+++ b/tests/basics/parser.py
@@ -4,8 +4,7 @@ try:
     compile
 except NameError:
     print("SKIP")
-    import sys
-    sys.exit()
+    raise SystemExit
 
 # completely empty string
 # uPy and CPy differ for this case
diff --git a/tests/basics/set_type.py b/tests/basics/set_type.py
index d790fa062ee12ec796363165f569f4b7e879ba69..787a99e81568908934984d74b72c07a7cea319d3 100644
--- a/tests/basics/set_type.py
+++ b/tests/basics/set_type.py
@@ -5,9 +5,8 @@
 try:
     set
 except NameError:
-    import sys
     print("SKIP")
-    sys.exit()
+    raise SystemExit
 
 print(set)
 
diff --git a/tests/basics/slice_attrs.py b/tests/basics/slice_attrs.py
index 67456ff8e6c0dd8978060a769910611ab1d15ed5..e85ead4ba965b6c75046ac22d0453cb4e33b64b0 100644
--- a/tests/basics/slice_attrs.py
+++ b/tests/basics/slice_attrs.py
@@ -8,9 +8,8 @@ class A:
 try:
     t = A()[1:2]
 except:
-    import sys
     print("SKIP")
-    sys.exit()
+    raise SystemExit
 
 
 A()[1:2:3]
diff --git a/tests/basics/special_methods2.py b/tests/basics/special_methods2.py
index 3623b30dcc5aacf5d3af5014f6d1c35bdd9581f1..ba7cf27cda36d793b56829f57643a8b7d4c53a69 100644
--- a/tests/basics/special_methods2.py
+++ b/tests/basics/special_methods2.py
@@ -100,9 +100,8 @@ cud2 = Cud()
 try:
     +cud1
 except TypeError:
-    import sys
     print("SKIP")
-    sys.exit()
+    raise SystemExit
 
 # the following require MICROPY_PY_ALL_SPECIAL_METHODS
 +cud1
diff --git a/tests/basics/string_center.py b/tests/basics/string_center.py
index a2739201acfa7d85371efab6e3f8cb9122c4d81a..40e8af4b8dc2fdeb4ffd192e5d75fa6daf36fe5f 100644
--- a/tests/basics/string_center.py
+++ b/tests/basics/string_center.py
@@ -1,9 +1,8 @@
 try:
     str.center
 except:
-    import sys
     print("SKIP")
-    sys.exit()
+    raise SystemExit
 
 print("foo".center(0))
 print("foo".center(1))
diff --git a/tests/basics/string_partition.py b/tests/basics/string_partition.py
index b3b2f0907d9c93f5da26d05ff529adb74fe610ad..bc36388fde5e74d7792036d11ecfa0673599e33e 100644
--- a/tests/basics/string_partition.py
+++ b/tests/basics/string_partition.py
@@ -2,8 +2,7 @@ try:
     str.partition
 except AttributeError:
     print("SKIP")
-    import sys
-    sys.exit()
+    raise SystemExit
 
 print("asdf".partition('g'))
 print("asdf".partition('a'))
diff --git a/tests/basics/string_rpartition.py b/tests/basics/string_rpartition.py
index 84e0031fb08a10ffb89d41a94f79d294293ab1ce..6d65dfaf2127d53ce5e4e96323ed2b4f1bf8df2a 100644
--- a/tests/basics/string_rpartition.py
+++ b/tests/basics/string_rpartition.py
@@ -2,8 +2,7 @@ try:
     str.partition
 except AttributeError:
     print("SKIP")
-    import sys
-    sys.exit()
+    raise SystemExit
 
 print("asdf".rpartition('g'))
 print("asdf".rpartition('a'))
diff --git a/tests/basics/string_splitlines.py b/tests/basics/string_splitlines.py
index 1d08f6e6d7df69cd69ce697b8fa597590216a567..c4c3fcb8041662cb5923183579c77a76210883eb 100644
--- a/tests/basics/string_splitlines.py
+++ b/tests/basics/string_splitlines.py
@@ -3,9 +3,8 @@
 try:
     str.splitlines
 except:
-    import sys
     print("SKIP")
-    sys.exit()
+    raise SystemExit
 
 # test \n as newline
 print("foo\nbar".splitlines())
diff --git a/tests/basics/struct1.py b/tests/basics/struct1.py
index bb6877c785f71ffe729da1e0f0e85cbf23649b48..a442beb1e52567590f88145ed6e01eabd201843c 100644
--- a/tests/basics/struct1.py
+++ b/tests/basics/struct1.py
@@ -4,9 +4,8 @@ except:
     try:
         import struct
     except ImportError:
-        import sys
         print("SKIP")
-        sys.exit()
+        raise SystemExit
 
 print(struct.calcsize("<bI"))
 print(struct.unpack("<bI", b"\x80\0\0\x01\0"))
diff --git a/tests/basics/struct1_intbig.py b/tests/basics/struct1_intbig.py
index 7f4c3ce120f6b0563187fcdfdcc4f15cb402e2fa..b1fec527ef422c060be7f69b436340e86fb0d48c 100644
--- a/tests/basics/struct1_intbig.py
+++ b/tests/basics/struct1_intbig.py
@@ -4,9 +4,8 @@ except:
     try:
         import struct
     except ImportError:
-        import sys
         print("SKIP")
-        sys.exit()
+        raise SystemExit
 
 # check maximum pack on 32-bit machine
 print(struct.pack("<I", 2**32 - 1))
diff --git a/tests/basics/struct2.py b/tests/basics/struct2.py
index e3f8bbebfb0d42a11fe67054d9409bdab3928360..d8234d0d36313e72e8180840525aae086b9bcd17 100644
--- a/tests/basics/struct2.py
+++ b/tests/basics/struct2.py
@@ -6,9 +6,8 @@ except:
     try:
         import struct
     except ImportError:
-        import sys
         print("SKIP")
-        sys.exit()
+        raise SystemExit
 
 print(struct.calcsize('0s'))
 print(struct.unpack('0s', b''))
diff --git a/tests/basics/struct_micropython.py b/tests/basics/struct_micropython.py
index 53306dad67c0b59f7040d3c51392825a5275637b..4b9dfe1378a301ced58a0e2a1d29e135e83f47d9 100644
--- a/tests/basics/struct_micropython.py
+++ b/tests/basics/struct_micropython.py
@@ -6,9 +6,8 @@ except:
     try:
         import struct
     except ImportError:
-        import sys
         print("SKIP")
-        sys.exit()
+        raise SystemExit
 
 class A():
     pass
diff --git a/tests/basics/subclass_classmethod.py b/tests/basics/subclass_classmethod.py
index 48f164b3644d932207af98d620b4063b8e7a9372..00a2ebd7cd3bb64353be18f5192575d36d540df2 100644
--- a/tests/basics/subclass_classmethod.py
+++ b/tests/basics/subclass_classmethod.py
@@ -8,9 +8,8 @@ class Base:
 try:
     Base.__name__
 except AttributeError:
-    import sys
     print("SKIP")
-    sys.exit()
+    raise SystemExit
 
 class Sub(Base):
     pass
diff --git a/tests/basics/sys1.py b/tests/basics/sys1.py
index 29ef974d1413b2e87498339cdd8d53ea433be5d3..0d74a1292b180cf5bf5b25c76ba8f9da44c04ced 100644
--- a/tests/basics/sys1.py
+++ b/tests/basics/sys1.py
@@ -20,7 +20,7 @@ except AttributeError:
     print(True)
 
 try:
-    sys.exit()
+    raise SystemExit
 except SystemExit as e:
     print("SystemExit", e.args)
 
diff --git a/tests/basics/zip.py b/tests/basics/zip.py
index 958addb7af2cf224bb83df7c593bfc507a560259..66f2544e57366b63096b02ad638b94f91ef14834 100644
--- a/tests/basics/zip.py
+++ b/tests/basics/zip.py
@@ -3,8 +3,7 @@ try:
     set
 except NameError:
     print("SKIP")
-    import sys
-    sys.exit()
+    raise SystemExit
 
 print(list(zip()))
 print(list(zip([1], set([2, 3]))))