Let’s take an example :
I would like to check if the variable s is a string with length equal or less than 3. I tried the following :
if (not isinstance(s,str)) | (len(s)>3) :
    print("The value of s is not correct : must be a string, with length equal or less than 3")
But it is not correct as the code considers the second condition whatever the result of the first one. For example, with s = 2, the code returns the error :
object of type 'int' has no len()
I would have thought that since the first condition is True, that the rest of the line would not have been considered. How please could I get the code to run until the first True condition is reached?
Advertisement
Answer
| is a bitwise or. use the keyword or instead.
The or will shortcircuit as you correctly mention in your question, so if s is not a string the second part will not evaluate, preventing the error of trying to apply len to a non-string object.
if not isinstance(s, str) or len(s) > 3:
    print("The value of s is not correct : must be a string, with length equal or less than 3")