Well, I guess readability is more related to how you code, say how you name variables, functions, etc., how you structure your code and comment it.
But, regarding the exception handling question that you have: these are the things I think you should consider:
1- If the function gets a valid input and does not find anything you shouldn't throw or define an exception. You just need to return a value that represents you didn't find anything and/or just print a proper message.
2- If the input parameter, v, is invalid depending whether it is an object instantiated from a class or just a primitive type, you could define a proper exception for it or just catch a built-in exception, respectively.