This pattern is a little tricksy, where we have an optionally context manger object and some methods throw if you didn't enter. The alternative is introducing an different object that you have to context manager enter to get that has the result methods. Trade off from my view is api surface area vs static analyzability.    I'm fine with either approach, just want to make sure we make this trade off decision explicitly. 