diff options
author | Inada Naoki <songofacandy@gmail.com> | 2021-03-29 03:28:14 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-03-29 03:28:14 (GMT) |
commit | 4827483f47906fecee6b5d9097df2a69a293a85c (patch) | |
tree | c4d7e34163e9583c06003d5335d020ce27aa4559 /Doc/whatsnew | |
parent | 261a452a1300eeeae1428ffd6e6623329c085e2c (diff) | |
download | cpython-4827483f47906fecee6b5d9097df2a69a293a85c.zip cpython-4827483f47906fecee6b5d9097df2a69a293a85c.tar.gz cpython-4827483f47906fecee6b5d9097df2a69a293a85c.tar.bz2 |
bpo-43510: Implement PEP 597 opt-in EncodingWarning. (GH-19481)
See [PEP 597](https://www.python.org/dev/peps/pep-0597/).
* Add `-X warn_default_encoding` and `PYTHONWARNDEFAULTENCODING`.
* Add EncodingWarning
* Add io.text_encoding()
* open(), TextIOWrapper() emits EncodingWarning when encoding is omitted and warn_default_encoding is enabled.
* _pyio.TextIOWrapper() uses UTF-8 as fallback default encoding used when failed to import locale module. (used during building Python)
* bz2, configparser, gzip, lzma, pathlib, tempfile modules use io.text_encoding().
* What's new entry
Diffstat (limited to 'Doc/whatsnew')
-rw-r--r-- | Doc/whatsnew/3.10.rst | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index 1c4e5c4..3a563c1 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -454,6 +454,30 @@ For the full specification see :pep:`634`. Motivation and rationale are in :pep:`635`, and a longer tutorial is in :pep:`636`. +.. _whatsnew310-pep597: + +Optional ``EncodingWarning`` and ``encoding="locale"`` option +------------------------------------------------------------- + +The default encoding of :class:`TextIOWrapper` and :func:`open` is +platform and locale dependent. Since UTF-8 is used on most Unix +platforms, omitting ``encoding`` option when opening UTF-8 files +(e.g. JSON, YAML, TOML, Markdown) is very common bug. For example:: + + # BUG: "rb" mode or encoding="utf-8" should be used. + with open("data.json") as f: + data = json.laod(f) + +To find this type of bugs, optional ``EncodingWarning`` is added. +It is emitted when :data:`sys.flags.warn_default_encoding <sys.flags>` +is true and locale-specific default encoding is used. + +``-X warn_default_encoding`` option and :envvar:`PYTHONWARNDEFAULTENCODING` +are added to enable the warning. + +See :ref:`io-text-encoding` for more information. + + New Features Related to Type Annotations ======================================== |