Yup, that's ok. Any false value for `ver` means we'll move on to try the next technique. It might be false (None) because we don't have a keywords handler for our VCS, or if we don't recognize the VCS handler at all. If might be false (empty-dict) if we *do* have a handler but it didn't find any expanded keywords (this is what git/from_keywords.py does).

One concern I have: wrapping so much code with an `except AttributeError` is likely to mask programming errors in the keyword-extracting function. It'd be better if only the call to `vcs_function()` were wrapped, and to allow attribute errors after that point to be raised normally. I suspect it'll make the code flow messier, though.