[Python-ideas] with-statement syntactic quirk

Mathias Panzenböck grosser.meister.morti at gmx.net
Thu Nov 1 03:46:36 CET 2012


On 10/31/2012 10:03 PM, Arnaud Delobelle wrote:
> On 31 October 2012 10:38, Barry Warsaw <barry at python.org> wrote:
>> with-statements have a syntactic quirk, which I think would be useful to fix.
>> This is true in Python 2.7 through 3.3, but it's likely not fixable until 3.4,
>> unless of course it's a bug <wink>.
>>
>> Legal:
>>
>>>>> with open('/etc/passwd') as p1, open('/etc/passwd') as p2: pass
>>
>> Not legal:
>>
>>>>> with (open('/etc/passwd') as p1, open('/etc/passwd') as p2): pass
>>
>> Why is this useful?  If you need to wrap this onto multiple lines, say to fit
>> it within line length limits.  IWBNI you could write it like this:
>>
>>      with (open('/etc/passwd') as p1,
>>            open('/etc/passwd') as p2):
>>            pass
>>
>> This seems analogous to using parens to wrap long if-statements, but maybe
>> there's some subtle corner of the grammar that makes this problematic (like
>> 'with' treating the whole thing as a single context manager).
>>
>> Of course, you can wrap with backslashes, but ick!
>
> No need for backslashes, just put the brackets in the right place:
>
>      with (
>              open('/etc/passwd')) as p1, (
>              open('/etc/passwd')) as p2:
>         pass
>
> ;)
>

Because that's not confusing. Why not write:

	with open('/etc/passwd'
			) as p1, open(
			'/etc/passwd') as p2:
		pass



More information about the Python-ideas mailing list