On 2016-10-01 19:07, Neil Girdhar wrote:
I'm just throwing this idea out there to get feedback.

Sometimes, I want to conditionally enter a context manager.  This
simplest (afaik) way of doing that is:

    with ExitStack() as stack:
        if condition:
            cm = stack.enter_context(cm_function())
        suite()

I suggest a more compact notation:

    with cm_function() as cm if condition:
        suite()

I'm not sure that this is possible within the grammar.  (For some reason
with with_expr contains '"as" expr' rather than '"as" NAME'?

I realize this comes up somewhat rarely.  I use context managers a lot,
and it comes up maybe 1 in 5k lines of code.

For some extensions of this notation, an else clause could bind a value
to cm in the case that condition is false.

If you defined a null context manager, you could then write:

    with (cm_function() if condition else cm_null()) as cm:
        suite()

Do you need 'cm' itself? Its type changes depending on the condition, so I don't see how it could be useful.

If it's not needed, then that shortens a little to:

    with cm_function() if condition else cm_null():
        suite()

_______________________________________________
Python-ideas mailing list
[email protected]
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to