<div dir="ltr">> It is not reasonable to expect an error to be generated at runtime:<br>> because each and every object would have to be queried as to whether<br>> they have the attribute to know if there is ambiguity on each and every<br>> reference to an attribute.<div><br></div><div>It absolutely is:</div><div>if you're using an "inferred" syntax like</div><div><br></div><div>in object:</div><div>    .value</div><div><br></div><div>but there are multiple such objects to look at, Python immediately throws an error, before doing any kind of lookup. Hence the error doesn't say "I couldn't find the attribute x on any object" but instead "There's ambiguity so I didn't even try".</div></div><br><div class="gmail_quote"><div dir="ltr">On Mon, May 2, 2016 at 6:19 PM MRAB <<a href="mailto:python@mrabarnett.plus.com">python@mrabarnett.plus.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On 2016-05-02 23:06, Erik wrote:<br>
> On 02/05/16 23:00, Joshua Morton wrote:<br>
>> It should be a name error, perhaps 'Accessed object's name cannot be<br>
>> inferred', or a similar error to UnboundLocalException.<br>
><br>
> You are missing the point.<br>
><br>
> It is not reasonable to expect an error to be generated at compile time:<br>
> because the compiler has no way of knowing what attributes will exist on<br>
> the objects at runtime.<br>
><br>
> It is not reasonable to expect an error to be generated at runtime:<br>
> because each and every object would have to be queried as to whether<br>
> they have the attribute to know if there is ambiguity on each and every<br>
> reference to an attribute.<br>
><br>
> The question of which error or warning or exception should be generated<br>
> is moot ;)<br>
><br>
You _don't_ have to know attributes are available. It's as simple(?) as:<br>
when it sees the leading-dot notation, it checks how many expressions<br>
the enclosing 'with' was followed by.<br>
<br>
For example:<br>
<br>
     with something:<br>
         .foo()<br>
<br>
is OK (the 'with' has 1 expression), but:<br>
<br>
    with first_thing, second_else:<br>
        .foo()<br>
<br>
might not be OK (the 'with' has 2 expressions).<br>
<br>
_______________________________________________<br>
Python-ideas mailing list<br>
<a href="mailto:Python-ideas@python.org" target="_blank">Python-ideas@python.org</a><br>
<a href="https://mail.python.org/mailman/listinfo/python-ideas" rel="noreferrer" target="_blank">https://mail.python.org/mailman/listinfo/python-ideas</a><br>
Code of Conduct: <a href="http://python.org/psf/codeofconduct/" rel="noreferrer" target="_blank">http://python.org/psf/codeofconduct/</a><br>
</blockquote></div>