Because the error should be checked immediately after the conversion, I think it is a bad idea to separate the two. The name is up for grabs and I don't think it needs to be exposed, but if the variable receiving the result is passed by reference then the function return can be used for an error flag. So I think the `PyErr_Occurred` check should be part of the conversion so you could do
```
if (pyint_as_axis(obj, &axis) < 0) {
    PyErr_Format(...);
    return -1;
}
```
Makes it more like a converter.