Bart Nessux wrote:
Should an if statement have a corresponding else statement? Or, is it OK
to have an if statement by itself. For completeness, it seems the two
should be together, but from experience I know that a if statement by
itself works just fine. Below is an example:
if x >=0:
DO SOMETHING
Would it be better, or perhaps more complete, written like this:
if x >=0:
DO SOMETHING
else:
DO SOMETHING ELSE
No direct answer, but a good way to learn about this kind of questions is to
study real code, and the best way to learn from the masters would probably
be to look into the python library.
Now, from the pointless statistics department, a little script that counts
occurences of both if and if...else:
<ifstats.py>
#!/usr/bin/env python
""" Analyse if statements in python scripts
"""
__author__ = "Peter Otten"
__category__ = "Pointless statistics"
import compiler
class IfStats:
def __init__(self):
self.total = 0
self.withElse = 0
def __str__(self):
return "%d of %d if statements have an else branch" %
(self.withElse, self.total)
def visitIf(self, node):
self.total += 1
if node.else_:
self.withElse += 1
if __name__ == "__main__":
import os, sys, optparse
parser = optparse.OptionParser(
usage="usage: \%ifstats [-v] [-r] folder1 ... folderN",
description="scan python scripts for if statements with or without
else branch")
parser.add_option("-v", "--verbose", action="store_true",
help="print info about every processed file")
parser.add_option("-r", "--recursive", action="store_true",
help="recursively collect files")
options, args = parser.parse_args()
totalFiles = 0
totalIf = 0
totalWithElse = 0
failed = 0
for root in args:
for path, folders, files in os.walk(root):
for fn in files:
if fn.endswith(".py"):
fp = os.path.join(path, fn)
try:
a = compiler.parseFile(fp)
except:
failed += 1
print >> sys.stderr, "%s --> FAILED" % fp
else:
stats = IfStats()
compiler.walk(a, stats)
if options.verbose:
print "%s --> %s" % (fp, stats)
else:
sys.stdout.write(".")
sys.stdout.flush()
totalIf += stats.total
totalWithElse += stats.withElse
totalFiles += 1
if not options.recursive: break
print
print "%d of %d if statements with else branch" % (totalWithElse,
totalIf)
print "in %d files" % totalFiles
if failed:
print "parsing failed for %d files" % failed
</ifstats.py>
It turns out that only 2039 of 11157 if statements in the standard library
have an else branch. Now draw your own conclusions...
Peter