diff --git a/CHANGES.rst b/CHANGES.rst index db65ee16..05609229 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -10,6 +10,8 @@ Unreleased removed in Flask 2.1, while remaining compatible with both in 2.0.x. Use ``response.request.environ`` instead. :pr:`4341` - Fix type annotation for ``errorhandler`` decorator. :issue:`4295` +- Revert a change to the CLI that caused it to hide ``ImportError`` + tracebacks when importing the application. :issue:`4307` Version 2.0.2 diff --git a/src/flask/cli.py b/src/flask/cli.py index 7ab4fa1c..8e215322 100644 --- a/src/flask/cli.py +++ b/src/flask/cli.py @@ -258,15 +258,16 @@ def locate_app(script_info, module_name, app_name, raise_if_not_found=True): try: __import__(module_name) - except ImportError as e: + except ImportError: # Reraise the ImportError if it occurred within the imported module. # Determine this by checking whether the trace has a depth > 1. if sys.exc_info()[2].tb_next: raise NoAppException( - f"While importing {module_name!r}, an ImportError was raised." - ) from e + f"While importing {module_name!r}, an ImportError was" + f" raised:\n\n{traceback.format_exc()}" + ) from None elif raise_if_not_found: - raise NoAppException(f"Could not import {module_name!r}.") from e + raise NoAppException(f"Could not import {module_name!r}.") from None else: return