On Tue, Feb 2, 2021 at 8:16 PM Victor Stinner <vstin...@python.org> wrote:
>
> > > I understand that encoding=locale.get_locale_encoding() would be
> > > different from encoding="locale":
> > > encoding=locale.get_locale_encoding() doesn't call
> > > os.device_encoding(), right?
> > >
> >
> > Yes.
>
> Would it be useful to add a io.get_locale_encoding(fd)->str (maybe
> "get_default_encoding"?) function which gives the chosen encoding from
> a file descriptor, similar to open(fd, encoding="locale").encoding?
> The os.device_encoding() call is not obvious.
>

I don't think it's so useful. encoding=None is 99% same to
encoding=locale.getpreferedencoding(False).

On Unix, os.device_encoding() just returns locale encoding.
On Windows, os.device_encoding() is very unlikely used. open() uses
WindowsConsoleIO for console unless PYTHONLEGACYWINDOWSSTDIO is set
and encoding for it is UTF-8.

And that's why I removed the detailed behavior from the PEP. It is too
detailed and almost unrelated to EncodingWarning.
I wrote a simple comment in this section instead.
https://www.python.org/dev/peps/pep-0597/#locale-is-not-a-codec-alias

>
> > > > Opt-in warning
> > > > ---------------
> > > >
> > > > Although ``DeprecationWarning`` is suppressed by default, emitting
> > > > ``DeprecationWarning`` always when ``encoding`` option is omitted
> > > > would be too noisy.
> > >
> > > The PEP is not very clear. Does "-X warn_encoding" only emits the
> > > warning, or does it also display it by default? Does it add a warning
> > > filter for EncodingWarning?
> > >
> >
> > This section is not the spec. This section is the rationale for adding
> > EncodingWarning instead of using DeprecationWarning.
> >
> > As spec saying, EncodingWarning is a subclass of Warning. So it is
> > displayed by default. But it is not emitted by default.
> >
> > When -X encoding_warning (or -X warn_default_encoding) is used, the
> > warning is emitted and shown unless the user suppresses warnings.
>
> I understand that EncodingWarning is always displayed by default
> (default warning filters don't ignore it, whereas DeprecationWarning
> are ignored by default), but no warning is emitted by default. Ok,
> that makes sense. Maybe try to say it explicitly in the PEP.
>
>
> > This PEP doesn't have "backward compatibility" section because the PEP
> > doesn't break any backward compatibility.
>
> IMO it's a good thing to always have the section, just to say that you
> took time to think about backward compatibility ;-) The section can be
> empty, like just say "there is no incompatible change" ;-)
>
>
> > And if developers want to support Python ~3.9 and use -X
> > warn_default_encoding on 3.10, they need to write
> > `encoding=getattr(io, "LOCALE_ENCODING", None)`, as written in the
> > spec.
>
> Maybe repeat it in the Backward Compatibility section.
>
> It's important to provide a way to prevent the warning without losing
> the support for old Python versions.
>

will do.

>
> > > The main question is if it's possible to use encoding="locale" on
> > > Python 3.6-3.9 (maybe using some ugly hacks).
> >
> > No.
>
> Hum. To write code compatible with Python 3.9, I understand that
> encoding=None is the closest to encoding="locale".
>
> And I understand that encoding=getattr(io, "LOCALE_ENCODING", None) is
> backward and forward compatible ;-)
>
> Well, encoding=None will hopefully remain accepted with your PEP
> anyway for lazy developers ;-)
>

Yes. I don't think this warning is enabled by default in near future.
So developers can just use the option to find missing `encoding="utf-8"` bug.


>
> > Oh, I'm sorry. I want to make it in 3.10.
>
> Since it doesn't change anything by default, the warning is only
> displayed when you opt-in for it, IMO Python 3.10 target is
> reasonable.
>
> Victor
> --
> Night gathers, and now my watch begins. It shall not end until my death.

-- 
Inada Naoki  <songofaca...@gmail.com>
_______________________________________________
Python-Dev mailing list -- python-dev@python.org
To unsubscribe send an email to python-dev-le...@python.org
https://mail.python.org/mailman3/lists/python-dev.python.org/
Message archived at 
https://mail.python.org/archives/list/python-dev@python.org/message/FZ567UQIEKO5IIVSQPUFCSZJOZBMYD4D/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to