Agreed, but that's not what this is about. The warnings API are not catchable exceptions (but the display level can be configured) that are displayed when code is run. The effect is different to going through the report generated by some static analyis or tracing: all it's more immediate and directly relevant to what you're doing. They're generally used to inform rather than complain. Here's one that I've just started getting from Numpy:
RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility. Expected 96, got 88
Of course, static checkers should pick them up as well but I think the nudge approach is a good idea.