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

为何带括号的context managers在Python3.9可用但3.8报语法错误?

问题解答

这个带括号的with语句写法是Python 3.9才正式支持的语法,原因和Python解析器的迭代有关:

  • Python 3.8及更早版本使用LL(1)解析器,这种解析器的语法解析能力存在限制,无法识别括号包裹的多上下文管理器写法,加括号后会直接触发语法错误。
  • Python 3.9版本正式替换为PEG解析器,PEG解析器没有LL(1)解析器的单Token前瞻限制,因此新增支持了用括号包裹多个上下文管理器的语法,你甚至可以在括号内换行拆分多个上下文项,不需要写行尾反斜杠,示例如下:
with (
    Foo() as f,
    Foo() as b,
):
    print("Foo")

这个语法调整属于PEG解析器落地的配套优化,没有单独作为核心特性放在版本更新的高亮说明中,所以没找到对应说明是正常情况。


内容的提问来源于stack exchange,提问作者mogoh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 06:48:01