I am a -0 on this, but I think it was Greg Ewing that presented a real use
case:

There is no way to use literal_eval that gets you an inf (or NaN value).

Which is a real, though maybe not important, use case.

-CHB

On Fri, Sep 4, 2020 at 7:15 PM Steven D'Aprano <st...@pearwood.info> wrote:

> On Fri, Sep 04, 2020 at 09:40:55PM -0400, Cade Brown wrote:
>
> > The `eval(repr(x)) == x` is not a segment of my code; rather it is part
> of
>
> > Python's description of what 'repr' should do:
>
> >
>
> > https://docs.python.org/3.4/library/functions.html?highlight=repr#repr
>
> >
>
> >
>
> > Specifically: ` For many types, this function makes an attempt to return
> a
>
> > string that would yield an object with the same value when passed to
> eval()`
>
> > <https://docs.python.org/3.4/library/functions.html?highlight=repr#eval>
>
>
>
> "For many types" and "makes an attempt".
>
>
>
> There has never been, and never will be, a guarantee that all objects
>
> will obey that invariant. As I said, it is a Nice To Have, and it is
>
> designed for convenience at the interactive interpreter.
>
>
>
>
>
> > So everyone in this thread can stop mentioning security concerns; I'm
> sure
>
> > we're all aware of those and we should instead focus on what repr should
> do
>
> > and shouldn't do.
>
>
>
> You specifically said that math.inf doesn't solve your problem *because*
>
> `eval(repr(x))` doesn't work. Now you are backpeddling and saying that
>
> this is not your actual problem.
>
>
>
> (In fact it does work, if you do it correctly.)
>
>
>
> There are a million other objects that don't obey that invariant:
>
>
>
>     py> x = object()
>
>     py> eval(repr(x)) == x
>
>     SyntaxError: invalid syntax
>
>
>
>
>
> Why is float infinity so special that it needs to obey the
>
> invariant?
>
>
>
> What's the actual problem, or problems, in your code that you are trying
>
> to solve by making an infinity builtin? If there is no actual problem
>
> being solved, and the only reason you want this is because:
>
>
>
>
>
> > I think it's weird to not fulfill this promise
>
>
>
>
>
> you don't have any sympathy from me:
>
>
>
> - `eval(repr(x))` is not a promise, it is a mere suggestion
>
>   that *some* types *try* to provide.
>
>
>
> - Adding a special built-in constant Infinity just to satisfy
>
>   this Nice To Have feature is overkill.
>
>
>
> - It would require float infinities to change their repr from
>
>   'inf' to 'Infinity', and that will break doctests.
>
>
>
> - And even if that feature were satisfied by infinity, it
>
>   couldn't be satisfied by float NANs by their very definition:
>
>
>
>     py> from math import nan
>
>     py> nan == nan
>
>     False
>
>
>
> So while the cost of adding a new Infinity builtin is small, the benefit
>
> is even smaller.
>
>
>
>
>
> --
>
> Steve
>
> _______________________________________________
>
> Python-ideas mailing list -- python-ideas@python.org
>
> To unsubscribe send an email to python-ideas-le...@python.org
>
> https://mail.python.org/mailman3/lists/python-ideas.python.org/
>
> Message archived at
> https://mail.python.org/archives/list/python-ideas@python.org/message/AHJETD7PM6M6IKERP7NYNGYWAJBZDS27/
>
> Code of Conduct: http://python.org/psf/codeofconduct/
>
> --
Christopher Barker, PhD

Python Language Consulting
  - Teaching
  - Scientific Software Development
  - Desktop GUI and Web Development
  - wxPython, numpy, scipy, Cython
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/QIGOPPNQS3PJUHB3RFJ3FXAJWPVVDWDF/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to