When I run Flask from the terminal with flask run
, if my code has an error I see “TypeError: exceptions must derive from BaseException” instead of the actual error. To debug it I need to open the browser and inspect the exc_info
variable in the Werkzeug debugger, which is not convenient. Why is Flask doing this? How can I see the actual error in the terminal?
$ FLASK_APP=example flask run Traceback (most recent call last): File "[...]/lib/python3.9/site-packages/flask/cli.py", line 356, in __call__ self._flush_bg_loading_exception() File "[...]/lib/python3.9/site-packages/flask/cli.py", line 344, in _flush_bg_loading_exception raise exc_info TypeError: exceptions must derive from BaseException
Advertisement
Answer
This is a bug introduced in Flask 2.0 that will be fixed when Flask 2.0.2 is released. The CLI was incorrectly re-raising sys.exc_info()
instead of only the exception object. Until then, you can turn off lazy loading by running with flask run --eager-loading
.