Commit b79fc11d authored by Aymeric Augustin's avatar Aymeric Augustin
Browse files

Made the autoreloader survive all exceptions.

Refs #24704.
parent fe6ddb83
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -224,8 +224,7 @@ def check_errors(fn):
        global _exception
        try:
            fn(*args, **kwargs)
        except (ImportError, IndentationError, NameError, SyntaxError,
                TypeError, AttributeError):
        except Exception:
            _exception = sys.exc_info()

            et, ev, tb = _exception
+16 −0
Original line number Diff line number Diff line
@@ -169,3 +169,19 @@ class TestFilenameGenerator(SimpleTestCase):
            with self.assertRaises(SyntaxError):
                autoreload.check_errors(import_module)('test_syntax_error')
        self.assertFileFoundOnlyNew(filename)

    def test_check_errors_catches_all_exceptions(self):
        """
        Since Python may raise arbitrary exceptions when importing code,
        check_errors() must catch Exception, not just some subclasses.
        """
        dirname = tempfile.mkdtemp()
        filename = os.path.join(dirname, 'test_exception.py')
        self.addCleanup(shutil.rmtree, dirname)
        with open(filename, 'w') as f:
            f.write("raise Exception")

        with extend_sys_path(dirname):
            with self.assertRaises(Exception):
                autoreload.check_errors(import_module)('test_exception')
        self.assertFileFound(filename)