当前位置: 首页 > news >正文

pycharm中使用调试模式运行 uvicorn.run(app)报错TypeError: _patch_asyncio.locals.run() got an unexpected keywor解决

问题出现和解决过程

近期更新了pycharm版本从2023.01.06升级了2025.2.1版本,但是在升级之后,使用pycharm的调试模式运行uvicorn.run(app)报错如下:image
产生过以下几个可能性猜测

  1. fastapiuvicorn版本不匹配的问题
    但是根据目前已经都是按照最新的版本已经更新了,还是不行

  2. fastapi初始化内容中存在其他未发现的异步操作引发
    所以自己完全新建了一个最简的fastapi应用,运行结果仍然是报错
    image

  3. 怀疑是pycharm调试模式运行的问题
    怀疑原因如下:

  • uvicorn.run执行的reload参数为true时,能够正常调试运行,但是不设置或者设置为false不能运行
  • 已经尝试过按照最简fastapi应用运行,但是还是报错
  • 已经尝试在控制台能够正常运行

通过上述尝试和排查基本确定是由于pycharm的版本原因导致,通过pycharm配置已解决

与deepseek的确定

你在PyCharm调试模式下遇到的 TypeError: _patch_asyncio.<locals>.run() got an unexpected keyword argument 'loop_factory' 错误,通常与PyCharm调试器和异步事件循环的交互方式有关。下面我来帮你分析原因并提供解决方案。

🔍 问题根源

这个错误的核心原因通常是:

  1. PyCharm异步调试器冲突:PyCharm 2023.3.3及更高版本引入并默认启用了"异步IO调试器支持"的实验性功能。该功能旨在改进对Python异步代码的调试体验,但可能会与uvicorn服务器的事件循环设置产生冲突,导致在传递参数(如loop_factory)时出现异常。
  2. 事件循环环境差异:当你设置 reload=True 时,uvicorn会启动一个子进程来运行应用,这个子进程拥有一个干净的事件循环环境,从而可能避开了主进程中的环境冲突。而当 reload=False 时,uvicorn尝试在当前进程(即PyCharm调试器控制下的进程)的事件循环中启动服务器,此时PyCharm调试器对事件循环的干预就可能引发参数不匹配的错误。

🛠️ 解决方案

你可以尝试以下几种方法,建议从第一种开始:

  1. 禁用PyCharm的实验性异步调试支持
    这是最直接的解决方法,通过关闭可能导致冲突的功能来解决问题。

    • 在PyCharm中,连续按两下Shift键,打开"Search Everywhere"对话框。
    • 输入Registry...(包含三个点)并回车。
    • 在打开的注册表窗口中,找到并取消勾选python.debug.asyncio.repl选项。
    • 关闭注册表窗口,并重新启动调试会话。
      image
      image
  2. 使用命令行启动替代PyCharm运行配置
    绕过PyCharm的调试器,直接使用终端命令启动uvicorn,可以确保服务器在一个干净的环境中启动。

    • 在PyCharm中打开终端(Terminal)。
    • 使用以下命令启动你的应用(请根据你的实际文件路径调整app.main:app):
      uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload
      
    • 这种方式通常能有效避免由IDE运行配置引发的问题。
  3. 调整代码中的事件循环配置
    如果问题与事件循环的特定实现(如uvloop)有关,可以尝试强制使用标准的asyncio事件循环。

    • 在你的启动脚本中(通常是包含uvicorn.run的那个文件),进行如下修改:
      import uvicorn
      import asyncio# 在uvicorn.run之前,设置使用标准asyncio事件循环
      asyncio.set_event_loop_policy(asyncio.DefaultEventLoopPolicy())if __name__ == "__main__":uvicorn.run("app.main:app",host="0.0.0.0",port=8000,reload=False,  # 即使reload为False也尝试解决loop="asyncio"  # 明确指定使用asyncio)
      
  4. 尝试程序化启动方式
    使用uvicorn.ServerConfig类来启动,有时能提供更好的控制。

    • 将你的启动代码修改为:
      import uvicornif __name__ == "__main__":config = uvicorn.Config("app.main:app", host="0.0.0.0", port=8000, reload=False)server = uvicorn.Server(config)server.run()
      

💎 总结

这个错误通常源于PyCharm调试环境与uvicorn事件循环设置之间的交互问题。大多数情况下,禁用PyCharm的异步调试功能改用命令行启动就能解决。

http://www.hskmm.com/?act=detail&tid=16668

相关文章:

  • 交换机命令
  • 2025.9.25
  • 易基因:Cell Rep:华农任文凯团队利用ChIP-seq及多组学解析过敏性疾病的关键调控机制|项目文章
  • 详细介绍:STL 容器 --- list 类
  • Idea代码回退已经push到远段仓库的代码分支到指定提交记录
  • 开写第一篇
  • 大模型function calling多轮对话开发示例
  • ViTables 安装与 HDF5 数据可视化全指南 - 实践
  • elementuiplus修改el-checked多选框样式
  • DataGrip格式化SQL模板
  • 计算机毕设java毕业生档案流向追踪系统的设计与实现 基于Java的毕业生档案管理与追踪系统的设计与实现 Java技术驱动的毕业生档案流向监测架构开发
  • 图思维胜过链式思维:JGraphlet构建任务流水线的八大核心原则
  • 两月九城,纷享销客渠道携手伙伴共创CRM新纪元
  • markdown
  • mstsc带用户名密码自动登录
  • Sql Server Begin TRY sample
  • 基于数据平台构建供应链协同体系,实现业务全链路可视化与智能决策
  • 字节二面挂!面试官追问 Redis 内存淘汰策略 LRU 和传统 LRU 差异,我答懵了
  • UPX压缩工具的用法
  • NM:微生物组数据分析的规划与描述 - 详解
  • 300、金陵图
  • 山东布谷鸟科技:助力教育培训软件开发数字化转型与高效管理
  • 云边云科技4G路由器:连锁门店智慧联网的可靠基石 - 教程
  • PHP 8.5 升级指南 了解即将废弃的 11 个功能和完整迁移方案
  • 普科科技PKR26-3.5M3.5F-1M射频线缆在天线测试中的应用案例​
  • 基于Python+Vue开发的民宿客房预订管理系统源码+运行步骤
  • C#加解密:从入门到放弃?不,是到实战!
  • js react antd 实现页面低分变率和高分变率下字体大小自适用,主要是配置antd
  • C. Strange Function
  • 剑指offer-33、丑数