Thinking about it, my guess is that properly scoping the variable does not really prevent the user from leaking the value anyway:
with context() as foo:
leak = foo
This is unlike list comprehensions, where it is syntactically impossible to bind the comprehension variable to a new name accessible outside the comprehension.
So maybe the reason is that it is not really worth the trouble.
So maybe the reason is that it is not really worth the trouble.