That would work.  I felt that this change would have less of a footprint on the codebase
since this implementation is a drop-in replacement for PyObject_GetAttrString in its
current usage.  I'm also hesitant to throw away exceptions here, and prefer to leave
that decision to the caller.

NULL isn't an undefined state, it's a proxy for the state defined by tp_getattr.
It's always safe to clear the exception.

I could see a valid case for the PyArray_GetAttrString_NoException version,
and if there's a consenus I'll implement that instead.