Bug? Feature? setattr(foo, '3', 4) works!

Cem Karan cfkaran2 at gmail.com
Sat Dec 20 08:30:27 EST 2014


On Dec 19, 2014, at 10:33 AM, random832 at fastmail.us wrote:

> On Fri, Dec 19, 2014, at 07:23, Ben Finney wrote:
>> Cem Karan <cfkaran2 at gmail.com> writes:
>>> I'd like to suggest that getattr(), setattr(), and hasattr() all be
>>> modified so that syntactically invalid statements raise SyntaxErrors.
>> 
>> What syntactically invalid statements? The only syntactically invalid
>> statements I see you presenting are ones that *already* raise
>> SyntaxError.
>> 
>> I think you mean that setting an attribute on an object should be a
>> SyntaxError if the resulting attribute's name is not a valid identifier.
>> But why should a valid statement produce SyntaxError?
>> 
>> I'm −1 on such a change.
> 
> And some APIs - ctypes, for example - actually require using getattr
> with an invalid identifier in some cases (where attribute access is used
> for an underlying concept with names that are usually, but not always,
> valid identifiers: in ctypes' case, looking up symbols from DLLs.)

This is the one part I didn't know of; if ctypes requires this behavior, then it can't be changed.

Dave Angel, the reason I wanted to raise a SyntaxError is because from a user's point of view they look like the same type of error.  That said, you're right that for anyone trying to debug the interpreter itself raising SyntaxError would make things confusing. 

Regardless, because ctypes requires it, it can't be changed.  I'm dropping the suggestion.

Thanks,
Cem Karan


More information about the Python-list mailing list