ouch, this `return` was still not preventing cleaning.  the finally still runs.
but a previous build dir needs to prevent cleaning.
there is a test to confirm cleaning doesn't happen in this case, but I see it's broken.

so 3 recommended changes:

1. keep the except, but instead of the `return`, set `options.no_clean=True`, which the finally checks for
2. fix the broken test https://github.com/pypa/pip/blob/develop/tests/functional/test_install_cleanup.py#L131 . for it to be worthwhile, it needs this call `write_delete_marker_file(script.venv_path/'build')`. cleanup will never happen on a dir, unless it contains pip's delete marker.
3. log this against 1.4.X (not develop), so it can be included in 1.4.2

the reason to include in 1.4.2, is that we're still deleting what we specifically said we wouldn't.

If you don't get to this, I will probably handle it on monday.

and thanks for doing this PR.  overall, much better.