You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Python 3.13及以上版本在asyncio REPL中输入async with语句会抛出IndentationError?

为何Python 3.13及以上版本在asyncio REPL中输入async with语句会抛出IndentationError?

嘿,这个问题我刚好也留意到了!你在Python 3.13及以上版本的asyncio REPL(就是通过uv run --python <版本号> python -m asyncio启动的专属交互环境)里遇到的IndentationError,其实是3.13版本对REPL的语法交互逻辑做了调整导致的,而且看起来是个还没修复的小问题。

先跟你确认下现象完全匹配:你输入async with httpx.AsyncClient() as client:这行后,3.13+的REPL直接跳出来报错,连输入缩进代码块的机会都不给;但换成3.12及以下版本,REPL会乖乖显示...提示符,让你接着写缩进里的逻辑——哪怕最后因为其他原因报错,至少多行语句的交互流程是正常的。

具体现象对比

Python 3.13+的报错场景

启动REPL后输入代码的完整流程:

asyncio REPL 3.13.0 (main, Oct 16 2024, 03:23:02) [Clang 18.1.8 ] on linux
Use "await" directly instead of "asyncio.run()".
>>> import asyncio
>>> import httpx
>>> async with httpx.AsyncClient() as client:
  File "<stdin>", line 1
    async with httpx.AsyncClient() as client:
                                             ^
IndentationError: expected an indented block after 'with' statement on line 1

Python 3.12及以下的正常交互

同样的操作在旧版本里能进入多行输入环节:

asyncio REPL 3.12.10 (main, Apr  9 2025, 04:03:51) [Clang 20.1.0 ] on linux
Use "await" directly instead of "asyncio.run()".
>>> import asyncio
>>> import httpx
>>> async with httpx.AsyncClient() as client:
...     r = await client.get('https://www.example.com/')
...
Traceback (most recent call last):
  ...

临时解决办法

目前有两个简单的方式能绕过这个问题:

  • 单行写法:如果逻辑简单,直接把缩进代码和async with写在同一行:
    >>> async with httpx.AsyncClient() as client: r = await client.get('https://www.example.com/')
    
  • 封装异步函数:把包含async with的逻辑包进异步函数,再通过await调用,这也是更规范的方式:
    >>> async def fetch_example():
    ...     async with httpx.AsyncClient() as client:
    ...         return await client.get('https://www.example.com/')
    ...
    >>> response = await fetch_example()
    

额外说明

这个问题应该是Python 3.13在优化REPL语法解析时引入的回归bug,毕竟你测试到3.13.8和3.14预览版都还存在这个问题。如果在意的话,可以关注Python官方的bug跟踪系统,说不定后续小版本就会修复啦。

备注:内容来源于stack exchange,提问作者Simon Pratt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 18:39:28