python / python/cpython

`fnmatch.translate` changed in an undocumented way in Python 3.14

オープン
#140,922 コメント 5 件 リアクション 0 件 担当者 1 名 GitHub で見る

@picnixz がすでに取り組んでいます。

2026年3月15日 から。

docs
主要言語
Python
スター
77.2k
フォーク
36k
PR マージ指標
PR 指標を取得中

説明

Documentation

Since Python 3.14, fnmatch.translate appends a lowercase z, whilst 3.13 and below used an uppercase Z.
https://docs.python.org/3/library/fnmatch.html#fnmatch.translate makes no mention of this. Searching for fnmatch in https://docs.python.org/3/whatsnew/3.14.html only finds https://docs.python.org/3/whatsnew/3.14.html#fnmatch .

> uvx --python=3.13 python -c "import fnmatch; print(fnmatch.translate('foo*'))"
(?s:foo.*)\Z
> uvx --python=3.14 python -c "import fnmatch; print(fnmatch.translate('foo*'))"
(?s:foo.*)\z

(noticed in https://github.com/pypa/distutils/issues/381)


Edit:
After further research, the only mention I could find in "What's new in Python 3.14" is https://docs.python.org/3/whatsnew/3.14.html#re, which only says

Support \z as a synonym for \Z

not that \z is now also used in place of \Z.
https://docs.python.org/3/howto/regex.html#more-metacharacters does mention that

\Z
The same as \z. For compatibility with old Python versions.

Up to you to see if this is worth acting upon. It did confuse me and I had a bit of a hard time finding reference for this change. But I understand if it's considered "implementation detail" and that distutils (setuptools)'s test validating a regex is too niche of a use-case to be worth documenting.

Linked PRs
  • gh-144457

コントリビューションガイド

コントリビューションガイドを開く

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

評価

この issue はまだ評価されていません。

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。