if, continuation and indentation

Jonathan Hartley tartley at tartley.com
Fri May 28 06:48:59 EDT 2010


On 28/05/2010 11:34, Jean-Michel Pichavant wrote:
> 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 tried to give a layout that fits the OP way of doing, but I would 
> not use what I described above, so I can understand why your co 
> workers go bananas :)
>
> when it comes to extended conditions in if statement I prefer to write 
> something like
>
> if self.haveLost():
>    raise ValueError("sorry, you lose")
>
> It drastically improves the reading

Good point.

+1 for naming the condition, hooray for self-documenting code.

Sometime last year at my workplace, we started referring to comments as 
'lies', we now always try to use techniques like this instead of comments.

-- 
Jonathan Hartley      Made of meat.      http://tartley.com
tartley at tartley.com   +44 7737 062 225   twitter/skype: tartley




More information about the Python-list mailing list