如何在PyCharm中调试Python异步代码?调试异常行为求助
解决PyCharm调试Asyncio代码时的断点异常问题
我之前调试asyncio代码时也碰到过类似的断点异常情况,结合你的代码来看,大概率是PyCharm对异步任务的调试配置或者代码写法的问题,给你几个实用的解决思路:
开启PyCharm的异步调试支持
打开File > Settings > Build, Execution, Deployment > Debugger > Python Debugger,确保Asyncio debugging选项是勾选状态。这个开关是PyCharm专门为异步代码调试准备的,没开的话断点基本没法正常工作。调整运行配置的终端模拟设置
找到你的Run/Debug配置,切换到Execution标签页,勾选Emulate terminal in output console。asyncio的事件循环有时候会因为终端输出的模拟问题导致调试异常,开了这个选项能让调试环境更稳定。改用更标准的asyncio代码写法
你当前手动管理事件循环的写法在调试时容易出问题,试试Python 3.7+支持的asyncio.run()写法,PyCharm对这种标准写法的调试兼容性更好:import asyncio async def compute(x, y): print("Compute %s + %s ..." % (x, y)) await asyncio.sleep(1.0) return x + y async def main(): tasks = [compute(x, x) for x in range(10)] await asyncio.wait(tasks) if __name__ == "__main__": asyncio.run(main())调整断点位置
尽量别把断点直接打在await语句上,PyCharm对这类语句的断点处理偶尔会有延迟。建议把断点放在compute函数的第一行、print语句或者return语句上,这样断点触发会更准确。更新PyCharm到最新版本
旧版本的PyCharm在异步代码调试上存在不少bug,更新到最新稳定版后,很多断点异常的问题都会自动修复。
内容的提问来源于stack exchange,提问作者AviKKi




