On Sat, 09 Feb 2013 13:57:41 -0500, Terry Reedy <tjre...@udel.edu> wrote:
> On 2/9/2013 8:31 AM, R. David Murray wrote:
> Changing AttributeError to TypeError only requires try-except, which is 
> cheap if there is no error, not an early type check.
> 
> > The reason we avoid such type checks is that we prefer to operate via
> > "duck typing", which means that if an object behaves like the expected
> > input, it is accepted.
> 
> And catching the existing AttributeError allows work-alikes. I agree 
> that an isinstance check is bad as well as unnecessary.
> 
> As it is, the core code for path, given above, is *already* wrapped in 
> try: except TypeError, (to give a more friendly error message!, as 
> TypeError is most like from a unicode-bytes mixing). So there would be 
> no extra cost for correct calls and all that is needed is another except 
> clause.
> 
>      except AttributeError as e:
>          bad = e.args[0].split()[0]
>          msg = "all components must be strings; one is a {}".format(bad)
>          raise TypeError("all components must be strings")
> 
> Thomas, unless David or someone else shoots down this idea here, I say 
> go ahead and open an enhancement issue and add terry.reedy as nosy.

Especially given that there is already a try/except there, this seems
fine to me.  I think perhaps the error text would be better if it
referred only to the type that is invalid, not to str.  So something
like:

    TypeError("object of type {} is not valid as a path
        "component".format(type(bad)))

--David
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to