Clarify that format strings accept arbitrary tokens as field names
未关闭
还没有人认领这个 Issue。
docs
- 主要语言
- Python
- 星标
- 77.2k
- 派生
- 35.9k
- PR 合并指标
- PR 指标待抓取
描述
Bug report
Bug description:
Should the code below produce an error?
'{(}'.format(**{'(': 2})
This produces '2' in Python 3.14.5 on MacOS.
Reading
https://docs.python.org/3/library/string.html#format-string-syntax
replacement_field: "{" [field_name] ["!" conversion] [":" format_spec] "}"
field_name: arg_name ("." attribute_name | "[" element_index "]")*
arg_name: [identifier | digit+]
this ends up pointing to identifier at https://docs.python.org/3/reference/lexical_analysis.html#grammar-token-python-grammar-identifier
NAME: name_start name_continue*
name_start: "a"..."z" | "A"..."Z" | "_" | <non-ASCII character>
name_continue: name_start | "0"..."9"
identifier: <NAME, except keywords>
Given that '(' is an Ascii character, then ( is not a valid identifier and it should not be allowed.
CPython versions tested on:
3.14
Operating systems tested on:
macOS
Linked PRs
- gh-151064
- gh-153143
贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
调研方向
首先复现所示的 format-string 示例,并阅读链接的 format string 语法和标识符语法文档。将文档中规定的字段名规则与观察到的行为进行比较,并将链接的 PRs 视为已有工作;当行为和文档就是否接受任意 token 达成一致时,即表示完成。
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- python
- 领域
- compilers
- Issue 类型
- 缺陷
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 活跃度
- 停滞
- 描述清晰度
- 基本清楚
- 新手友好度
- 25/100