if, continuation and indentation

Mark Lawrence breamoreboy at yahoo.co.uk
Sat May 29 20:59:39 EDT 2010


On 30/05/2010 01:23, john wrote:
> On May 28, 10:37 am, "Colin J. Williams"<cjwilliam... at gmail.com>
> wrote:
>> On 28-May-10 05:54 AM, Jonathan Hartley wrote:
>>
>>> On May 27, 1:57 pm, Jean-Michel Pichavant<jeanmic... at sequans.com>
>>> wrote:
>>>> HH wrote:
>>>>> I have a question about best practices when it comes to line wrapping/
>>>>> continuation and indentation, specifically in the case of an if
>>>>> statement.
>>
>>>>> When I write an if statement with many conditions, I prefer to use a
>>>>> parenthesis around the whole block and get the implicit continuation,
>>>>> rather than ending each line with an escape character.  Thus, using
>>>>> the example from the style guide (http://www.python.org/dev/peps/
>>>>> pep-0008/) I would write:
>>
>>>>>       if (width == 0 and
>>>>>           height == 0 and
>>>>>           color == 'red' and
>>>>>           emphasis == 'strong' or
>>>>>           highlight>    100):
>>>>>           raise ValueError("sorry, you lose")
>>
>>>>> The problem should be obvious -- it's not easy to see where the
>>>>> conditional ends and the statement begins since they have the same
>>>>> indentation.  Part of the problem, I suppose, is that Emacs indents
>>>>> 'height' and the other lines in the conditional to 4 spaces (because
>>>>> of the parenthesis).  How do people deal with this situation?
>>
>>>>> Thanks,
>>>>> Henrik
>>
>>>> One possible solution
>>
>>>>       if (
>>>>               width == 0 and
>>>>               height == 0 and
>>>>               color == 'red' and
>>>>               emphasis == 'strong' or
>>>>               highlight>    100
>>>>          ):
>>>>           raise ValueError("sorry, you lose")
>>
>>>> JM
>>
>>> I've always liked this, or even:
>>
>>>     if (
>>>         width == 0 and
>>>         height == 0 and
>>>         color == 'red' and
>>>         emphasis == 'strong' or
>>>         highlight>    100
>>>     ):
>>>         raise ValueError("sorry, you lose")
>>
>>> but my co-workers have uniformly gone bananas whenever I try it.
>>
>> I liked:
>>
>> On 27-May-10 08:48 AM, Xavier Ho wrote:
>>   >  On 27 May 2010 22:22, HH<henri... at gmail.com>  <mailto:henri... at gmail.com>>  wrote:
>>
>>   >
>>   >           if (width == 0 and
>>   >               height == 0 and
>>   >               color == 'red' and
>>   >               emphasis == 'strong' or
>>   >               highlight>  100):
>>   >               raise ValueError("sorry, you lose")
>>   >
>>   >
>>   >  I've gotta say - I've bumped into this problem before, and I'm sure many
>>   >  other have - this is a valid question. It just hasn't bothered me enough
>>   >  to ask...
>>   >
>>   >  Correct me if I'm wrong, but I think the following is equivalent, and
>>   >  looks better. Although this won't fix all ugly cases in that problem..
>>   >
>>   >  if (width, height, color, emphasis) == (0, 0, 'red', 'strong') or
>>   >  highlight>  100:
>>   >        raise ValueError("sorry, you lose")
>>   >
>>   >  Cheers,
>>   >  Xav
>>
>> but nobody commented.
>>
>> Colin W.
>
> Colin:
> Sure, you can do it that way.  IMO, though, the OP was  wrong, and so
> is the PEP.  Source code is meant to communicate.  So it must transmit
> the correct information to the computer; it also must inform your
> coworkers.  That means that you have a responsibility to care what
> they think, though you privately have your opinions.  Another reason
> the PEP is faulty in this circumstance is that a misplaced backslash,
> or a missing one, is easily found and fixed.  A misplaced parentheses,
> or just one of a pair, will transform your source code into something
> which may compile and then give faulty results:  a disaster.
> So keep it simple, and make it legible.
> Yours,
> John

IMHO complete garbage, if your editor doesn't show misplaced or missing 
parenthesis by highlighting you're using the wrong editor :)

Regards.

Mark Lawrence.





More information about the Python-list mailing list