This could be simplified a bit by using plus or minus 0.5 as "perturb", correct?

Also, you could leave out the "hasattr" check, since the other try/except blocks will catch the same thing.

More generally, however, we try hard to avoid having try/except blocks that catch anything.  Maybe there is no good alternative here.  If so, a short comment might be warranted. 

Is there a need for two blocks?  Could everything be condensed into a single block, with the idea that if something goes wrong with either end of the interval, chances are it will go wrong with the other, and there is not much point in trying to expand only one end?