On Mon, Sep 21, 2015 at 04:23:03PM -0400, Terry Reedy wrote:
try: process(re.match(needle, haystack).group()) except AttributeError: # no match no_needle()
is equivalent unless process can also raise AttributeError.
It is difficult to guarantee what exceptions a function will, or won't, raise. Even if process() is documented as "only raising X", I wouldn't be confident that the above might not disguise a bug in process as "no needle".
This is why the standard idiom for using re.match is to capture the result first, then test for truthiness (a MatchObject), or None-ness, before processing it.