Reputation: 28682
If I write:
if a == b:
# do something
elif a == c:
# do something else
and I just want to pass otherwise, is writing out the following required at the end?:
else:
pass
It seems to run fine without the else:
statement in the interpreter, is there a reason I'm not aware of that I should always include else: pass
in these cases?
Upvotes: 6
Views: 11524
Reputation: 1121834
No, it isn't, the else
suite is entirely optional.
From the if
statement documentation:
if_stmt ::= "if" expression ":" suite
( "elif" expression ":" suite )*
["else" ":" suite]
where (...)*
means zero or more, and [...]
means optional. So a valid if
compound statement has an if
line and suite, 0 or more elif
lines and corresponding suites, and at most one else
line and suite, which is optional.
The Python compiler will ignore any else: pass
block, there is really no point in including it:
>>> import dis
>>> dis.dis(compile('''\
... if True:
... foo
... else:
... pass
... ''', '<stdin>', 'exec'))
1 0 LOAD_NAME 0 (True)
3 POP_JUMP_IF_FALSE 13
2 6 LOAD_NAME 1 (foo)
9 POP_TOP
10 JUMP_FORWARD 0 (to 13)
4 >> 13 LOAD_CONST 0 (None)
16 RETURN_VALUE
>>> dis.dis(compile('''\
... if True:
... foo
... ''', '<stdin>', 'exec'))
1 0 LOAD_NAME 0 (True)
3 POP_JUMP_IF_FALSE 13
2 6 LOAD_NAME 1 (foo)
9 POP_TOP
10 JUMP_FORWARD 0 (to 13)
>> 13 LOAD_CONST 0 (None)
16 RETURN_VALUE
where the only difference is the line number attached to the LOAD_CONST
bytecode because of the extra lines in the first source sample.
Stylistically, else: pass
is just clutter, something to reduce readability.
Upvotes: 18
Reputation: 149
Don't ignore a 'better practice' even though there may be no 'best practice'.
An 'else:' clause certainly is not required, however... Logic and syntax rules aside, using an 'if-elif-elif-elif...else: pass' block provides the perfect opportunity for the author to document what conditions have NOT yet been met after possibly many if-elif checks. In the future should an unexpected 'corner case' raise its ugly head this bit of documentation may very well help to find the bug.
Upvotes: 4
Reputation: 23596
There is no need to put else
after an if
, or an elif
statement. The only place that you would need to use one is if you want to do something if the if
statement was not true. For example:
if a == b:
myString = "true"
else:
myString = "false";
Upvotes: 1