-"""Copied from https://raw.githubusercontent.com/micropython/micropython-lib/cfa1b9cce0c93a3115bbff3886c9bbcddd9e8047/unittest/unittest.py """
+"""Based on https://raw.githubusercontent.com/micropython/micropython-lib/cfa1b9cce0c93a3115bbff3886c9bbcddd9e8047/unittest/unittest.py """
+import sys
 class SkipTest(Exception):
     pass
 
+raiseException = False
+raiseBaseException = True
 
 class AssertRaisesContext:
 
             except SkipTest as e:
                 print(" skipped:", e.args[0])
                 test_result.skippedNum += 1
-            except:
+            except Exception as e: # user exception
                 print(" FAIL")
-                test_result.failuresNum += 1
-                # Uncomment to investigate failure in detail
-                #raise
-                continue
+                if raiseException:
+                    raise
+                else:
+                    print(e)
+                    test_result.failuresNum += 1
+                    continue
+            except BaseException as e: # system exception
+                print(" FAIL")
+                if raiseBaseException:
+                    raise
+                else:
+                    print(e)
+                    test_result.failuresNum += 1
+                    continue
             finally:
                 tear_down()
 
             if isinstance(c, object) and isinstance(c, type) and issubclass(c, TestCase):
                 yield c
 
-    m = __import__(module, fromlist=['']) # changed to permit non-top-level testing modules
+    m = __import__(module) # changed to permit non-top-level testing modules
     suite = TestSuite()
     for c in test_cases(m):
         suite.addTest(c)