> which was to check that all the sizes were instances of int.

That sounds reasonable to me. In fact, the behaviour numpy provides is already pretty bonkers:
```
>>> np.zeros((10.1, 2)).shape
(10, 2)
```

If you're happy with this interface (strings to create an array) then I'm not going to push - it is just a weird interface that really should be discouraged IMHO.