Craig Yoshioka wrote:
with uncached('file') as file: if not file: return
which isn't so bad, except it is overloading the meaning of file a bit, and
No, I don't agree with that. It is normal Pythonic idiom for objects to be interpreted in a boolean concept. The only difference here is that sometimes file will be (presumably) a file-like object, and sometimes it needs to be a sentinel like None. But this shouldn't disturb you: you have already suggested one possible implementation would be for __enter__ to return a special value, SkipWithBlock, to force skipping the block. That's fine: you can have this functionality *right now*. All you need do is change the spelling from SkipWithBlock to None, and use an explicit test inside the block rather than an implicit test, and you're done. Best of all, the use of an explicit test means you can do this: with whatever('file') as file: if file is None: log('error') else: normal_processing() which you can't do with your suggested implicit test-and-skip. The fact that with blocks are not flow-control is a feature, not a bug.
why shouldn't the with block be skippable?
It is skippable. Like every other code block, it is skippable by wrapping it in flow-control code to decide whether or not to skip it. -- Steven