if, continuation and indentation

2010-05-27 Thread HH
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
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: if, continuation and indentation

2010-05-27 Thread HH
On May 27, 11:37 am, Alain Ketterlin 
wrote:
> HH  writes:
> >     if (width == 0 and
> >         height == 0 and
> >         color == 'red' and
> >         emphasis == 'strong' or
> >         highlight > 100):
> >         raise ValueError("sorry, you lose")
>
> I prefer to see the "and" at the beginning of continuation lines, and
> usually group related items. I never mix operators without putting
> explicit parentheses. Something like:
>
>      if  (  width == 0 and height == 0
>             and color == 'red'
>             and ( emphasis == 'strong' or highlight > 100 ) ):
>          raise ValueError("sorry, you lose")

Thanks for all suggestions!  I like this solution a lot.

I agree with your statement about mixed operators and explicit
parentheses -- expecially since the eye/brain parser often does it
wrong, and I believe you demonstrated that above...

In [29]: print(False and (False or True))
False
In [30]: print(False and False or True)
True

> If you use a backslashes at the end of line, emacs will double-indent
> the following lines, but I think you said you prefer paretheses...

Yes, I much prefer the parentheses -- partly because PEP-8 suggests it
but mostly because the escapes get lost too easily.


HH
-- 
http://mail.python.org/mailman/listinfo/python-list