Jonathan Hartley wrote:
On May 27, 1:57 pm, Jean-Michel Pichavant <jeanmic...@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 because it splits the notion of what to do in which case, and how do you identify the cases (i.e. what should I do when I've lost, and how do I know that I've lost). If you don't want to pollute your upper namespace you can embed the function that way:

def foo():
   width = 0
   height = 0
   color = 'red'
   emphasis = 'strong'

   def haveLost():
return not width and not height and color == 'red' and emphasis =='strong'

   if haveLost():
       raise ValueError("sorry you lose")

It has the cool side effect to name your condition as well, that helps debugging the condition *a lot*.

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

Reply via email to