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