Speaking of consistency... ;) Numpy treats errors in dtype as TypeErrors, so I think we should also... Otherwise, what's the point of the TypeError class in the first place? I think ValueErrors are for just that, e.g. a negative number where non-negative are expected (which you can't distinguish with type info).