On Fri, Sep 03, 2021 at 09:32:26AM -0700, Guido van Rossum wrote:

> The question is, would anyone ever want to make a distinction between the
> two in *real* code? I find it unlikely that someone would write
> 
> try:
>     sum(x, y, z)
> except TypeError:
>     ...

Not for sum specifically, but yes, there are similar cases where I 
would. This is especially useful when using feature-detection rather 
than version-checking.

E.g. `min` and `max` now take a key parameter, but old versions didn't:

    # This is in 2.4
    >>> min(['a'], key=len)
    Traceback (most recent call last):
      File "<stdin>", line 1, in ?
    TypeError: min() takes no keyword arguments

A more recent example is math.gcd() which used to only take exactly two 
arguments but now takes an arbitrary number of arguments. We can use 
feature-detection to distinguish the two cases:

    gcd()  # in Python 3.5
    --> TypeError: gcd() takes exactly 2 arguments (0 given)

    gcd()  # in Python 3.9
    --> returns 0


Looking into the future, it would be useful to be able to distinguish 
between:

- passing the correct number of arguments but wrong values 
  (ValueError or similar) or wrong types (TypeError or AttributeError);

- and passing the wrong number of arguments, or invalid keywords.

That second case is currently a TypeError. I proposed a new subclass of 
TypeError for that purpose, ParameterError:

https://mail.python.org/archives/list/python-ideas@python.org/message/MXPCNEAWXWJPOHB3DC3QW3S3ZPOFSM4Q/




-- 
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/WVOF77TL6AHCGUHIY4L66EH6HWWOW7SU/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to