It is currently a general convention in asyncio to only catch Exception, not BaseException. I consider this a flaw and we should fix it, but it's unfortunately not so easy -- the tests will fail if you replace all occurrences of Exception with BaseException, and it is not always clear what's the right thing to do. E.g. catching KeyboardInterrupt may actually make it harder to stop a runaway asyncio app.
Catching BaseExceptions or KeyboardInterrupts in start_tls() would be pointless. Currently asyncio's internal state isn't properly hardened to survive a BaseException in all other places it can occur. Fixing that is one of my goals for 3.8.