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?
The if statements can be written without else or elif statements, But else and elif can't be used without else.
An else pass is dead code, you should remove it, as it adds unnecessary noise to the code and anyway the code will be clearer and easier to understand without it.
The colon ( : ) is important because it separates the condition from the statements to be executed after the evaluation of the condition.
To end the block, decrease the indentation. Subsequent statements after the block will be executed out of the if condition.
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.
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.
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";
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With