On 2020-07-11 20:56, Steve Holden wrote:
Given that case will be a keyword, what's the case (pun unintentional) for indenting the case clauses? What's wrong with 'case' and 'else' both indented the same as match? Without the keyword there'd be a case for indenting, but with it I don't see the necessity.

Kind regards,
Steve

The issue is as follows.

In Python, the style is that multi-line statements start with a keyword and that logical line ends with a colon. The next line is a statement, which is indented. The other parts of the statement structure are indented the same amount as its first line:

    if ...:
        ...
    elif ...:
        ...
    else:
        ...

The 'match' statement (or a 'switch' statement), however, can't follow the existing style.

It's either:

    match ...:
    case ...:
    case ...:

where the second line isn't indented (unlike all other structures), or:

    match ...:
        case ...:
        case ...:

where the other parts of the structure (the cases) aren't indented the same as the first line.

Another possibility is:

    match:
        ...
    case ...:
    case ...:

but the second line is an expression, not a statement (unlike all other structures).

An alternative is:

    match ...
    case ...:
    case ...:

no colon ending the first line, and no indenting of the second line, but that's unlike all other structures too.

None of the possibilities are formatted like the existing style.

So it's a case of picking the least inelegant one.


On Fri, Jul 10, 2020 at 12:09 PM Greg Ewing <greg.ew...@canterbury.ac.nz <mailto:greg.ew...@canterbury.ac.nz>> wrote:

    A thought about the indentation level of a speculated "else" clause...

    Some people have argued that "else" should be at the outer level,
    because that's the way it is in all the existing compound statements.

    However, in those statements, all the actual code belonging to the
    statement is indented to the same level:

          if a:
              ....
          elif b:
              ....
          else:
              ....

              ^
              |
              Code all indented to this level

    But if we were to indent "else" to the same level as "match",
    the code under it would be at a different level from the rest.

          match a:
              case 1:
                  ....
              case 2:
                  ....
          else:
              ....
              ^   ^
              |   |
              Code indented to two different levels

    This doesn't seem right to me, because all of the cases, including
    the else, are on the same footing semantically, just as they are in
    an "if" statement.

_______________________________________________
Python-Dev mailing list -- python-dev@python.org
To unsubscribe send an email to python-dev-le...@python.org
https://mail.python.org/mailman3/lists/python-dev.python.org/
Message archived at 
https://mail.python.org/archives/list/python-dev@python.org/message/M4YMCRVSKVKNUXQFI5KOMT5MQH6WJ23O/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to