if statements with or w/o else statements
Bart Nessux
bart_nessux at hotmail.com
Mon Feb 23 13:48:26 EST 2004
Peter Otten wrote:
> 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
>
Thanks Peter. That's an easy conclusion to come to.
More information about the Python-list
mailing list