In general, 3-levels of conditionals is about the max you ever want to use.  However, if you can figure out how to use fewer, it makes your code **much** easier to read.  I think my same suggestion as above applies here:  Just test the positive cases and allow the negative ones to fail and/or raise exceptions.  It's even okay if you allow negative cases to pass through as long as it will result in some later part failing or raising exception.  In other words, I think you are being way more careful than you need to be,  checking for every possibility.