ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Flask 如何关闭内置调试器与 reloader 以配合 IDE 外部调试器

Flask 如何关闭内置调试器与 reloader 以配合 IDE 外部调试器 Flask 如何关闭内置调试器与 reloader 以配合 IDE 外部调试器【免费下载链接】flaskThe Python micro framework for building web applications.项目地址: https://gitcode.com/gh_mirrors/fl/flask用 IDE 自带调试器外部调试器调试 Flask 应用时Flask 开发服务器的两个默认行为会干扰调试内置调试器会抢先把未处理异常截下来reloader 可能在断点停住时因代码变更触发意外重载。Flask 官方文档 调试章节 给出的做法是应用保持 debug 模式同时显式关闭内置调试器和 reloader。本文按flask run命令行和app.run()代码两条路径给出具体命令与验证方式。先弄清楚要解决什么外部调试器比内置调试器能力更强可以在请求过程中、错误发生之前逐步执行代码部分 IDE 调试器还支持 remote 模式调试另一台机器上运行的代码。但在 debug 模式下开发服务器默认同时启用交互式调试器和 reloader文档明确指出两者会干扰外部调试器具体表现是内置调试器未关闭时它会在外部调试器之前捕获未处理异常Unhandled exception 先落在浏览器的交互式 traceback 页面上reloader 未关闭时断点停留期间只要代码文件发生变化就可能触发意外重载打断调试会话。同时文档强调应用仍应处于 debug 模式。如果连 debug 模式一起关掉Flask 会把未处理错误变成通用的 500 错误页外部调试器同样拿不到可用的异常信息。所以目标配置是debug 开调试器关reloader 关。Flask 内置调试器在浏览器中的样子如下图所示来自 docs/debugging.rst 的示例截图路径一用 flask run 命令行关闭用flask run启动开发服务器时在 server 文档 和 cli 文档 的示例基础上追加两个选项即可$ flask --app hello run --debug --no-debugger --no-reload--app hello指向你的应用替换成实际的应用模块或工厂调用方式--debug保留 debug 模式必须保留原因见上一节--no-debugger关闭内置交互式调试器对应 CLI 选项--debugger/--no-debugger定义见 cli 源码--no-reload关闭代码变更自动重载对应--reload/--no-reload。对照 cli 文档 中flask --app hello run --debug的文档示例输出正常启用时启动横幅包含这几行$ flask --app hello run --debug * Serving Flask app hello * Debug mode: on * Running on http://127.0.0.1:5000/ (Press CTRLC to quit) * Restarting with inotify reloader * Debugger is active! * Debugger PIN: 223-456-919上面为文档示例输出。加上--no-debugger --no-reload后启动输出中不再出现Restarting with inotify reloader和Debugger is active!/Debugger PIN相关行可以据此判断两个组件确实没有启动。路径二用 app.run() 在代码中关闭从 Python 代码启动开发服务器时app.run()接收与 CLI 选项相似的参数来控制服务器见 Flask.run 的文档字符串。文档给出的写法app.run(debugTrue, use_debuggerFalse, use_reloaderFalse)按 server 文档 的要求把这次调用放在主代码块里避免之后用生产服务器导入运行时互相干扰if __name__ __main__: app.run(debugTrue, use_debuggerFalse, use_reloaderFalse)use_debugger、use_reloader会通过**options转发给底层的 Werkzeugrun_simple如果不显式传入两者默认跟随debug状态所以在debugTrue时必须显式传False。验证是否生效两条路径关闭后按 debugging 文档 描述的行为逐项确认断点能命中在 IDE 中于视图函数或业务代码里下断点触发一个请求外部调试器应停在断点处并可继续单步执行。文档说明外部调试器可用于在请求期间、错误发生之前逐步执行代码。异常归外部调试器制造一个未处理异常异常应由外部调试器捕获处理而不是在浏览器里弹出内置调试器的交互式 traceback 页面。断点期间不再意外重载断点停住时修改代码文件服务器不应再触发 reloadreloader 关闭后不再监听代码变更。关闭后仍保留的一个默认行为注意边界即使关闭了内置调试器开发服务器仍然会捕获未处理异常——文档解释这是为了避免服务器在任何错误时直接崩溃。如果你希望异常直接让服务器崩溃文档原话是通常你并不想要这样需要额外传入passthrough_errorsTrueapp.run( debugTrue, passthrough_errorsTrue, use_debuggerFalse, use_reloaderFalse )另外两个容易混淆的边界app.run()文档中的use_evalexFalse只是禁用交互式调试器里的代码执行但调试器的 traceback 页面仍然激活异常仍然先被内置调试器截住不能替代use_debuggerFalse。开发服务器和内置调试器都不要用于生产环境调试器允许从浏览器执行任意 Python 代码虽然有 PIN 保护但文档明确不建议依赖它做安全。生产部署应使用专门的服务器方案参见 deploying 文档。【免费下载链接】flaskThe Python micro framework for building web applications.项目地址: https://gitcode.com/gh_mirrors/fl/flask创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表