[Baypiggies] code review or tool suggestion
Glen Jarvis
glen at glenjarvis.com
Wed Nov 25 15:44:21 CET 2009
I learn *so* much from code reviews....
Just reading this conversation has helped me tremendously.... For
example, raising SystemExit is not something I've done before as a
clean way to exit. I always used sys.exit (or for rare cases _exit ).
Now I know better.
Obviously with reviews, one must take the reviewer into account as
well as the comments that they make. (Everyone has an opinion.. Often
one gets conflicting opinions on the same issue. And some reviewers
even give advise that breaks PEP-8 with the preamble... "*I* like to
do...." or give obviously unpythonic advise)
However, Drew's advise was very Pythonic and helpful. I *really* liked
reading Drew's comments because it showed readability was important to
him, that he has knowledge of the language (what works in what
version), he has looked at potential bugs, and, of course, that
exercising code/code coverage is important.
No matter how good we are, we can all learn from code reviews. I'm
personally *very* interested in this theme if any one else is brave
enough to stick their neck out.
I think I'll dig out something and publish to the list the next few
days, asking for a review. I'll try to find something very small to
not overwelm the readers. I'll also put on my thick skin and remember
that any comments made can make me grow as a programmer.
Anyone else?
Glen
On Nov 24, 2009, at 11:56 PM, Drew Perttula <drewp at bigasterisk.com>
wrote:
> Simeon Franklin wrote:
>> More to the point of Baypiggies though - if anyone wants to take a
>> look at my code I'd be happy for any pointers.
>
>
> 28 usage = "usage: %prog [-ovt] file"
>
> The second 'usage' is apparently ignored (in py 2.6.2)-- you can
> leave it out and the output looks the same (!).
>
>
> 30 parser.add_option("-o", action="store_true",
> dest="stdout", default=False,
> 31 help="Print to stdout instead of
> modifying file")
>
> Instead of dest, I like add_option("-o", "--stdout", action=...).
> Optparse chooses the long form for the option name, but the end user
> can now make more readable commandlines if he or she wants to.
>
>
> 46 for i, sub_part in enumerate(part.get_payload()):
> 47 replacement = process_node(sub_part)
> 48 if replacement:
> 49 del(parts_list[i])
>
> I don't have a proof, but this del seems like a bug. As soon as you
> delete an element out of the middle of parts_list, the rest of the
> parts_list wouldn't be in sync with the i index, so a second delete
> would hit the wrong part, no? This can surely be rewritten without
> any indexing.
>
> Also, I don't think you need to repeat the get_payload call in 43
> and 46. Maybe you had a previous version that appended the new part
> right onto parts_list in line 50? (Although even if you did that,
> you still wouldn't need to repeat the get_payload call.)
>
> 48 makes me nervous because it's a sloppy check for a value that
> could be False or "" or "some text". I'd probably use None as the
> special token and "if replacement is not None:" on line 48.
>
>
> 38 def process_node(part):
>
> This function is nested just so it can access 'options' from the
> outer function, as far as I can tell. It would probably be easier to
> read if process_node was at the top-level after main(), and you
> passed in 'verbose' as an argument. That way, process_node wouldn't
> be unnecessarily coupled with main(), main would be shorter, other
> programs could import and use process_node.
>
>
> 64 print "No filename was specified"
> 65 exit(-1)
> 66 else:
>
> raise SystemExit("No filename was specified")
> would be similar, but it prints to stderr (good!) and exits with a 1
> (close enough!).
>
> I think it would be quicker for readers to parse this as an error
> check if you dropped the 'else' and unindented 67-69.
>
> _______________________________________________
> Baypiggies mailing list
> Baypiggies at python.org
> To change your subscription options or unsubscribe:
> http://mail.python.org/mailman/listinfo/baypiggies
More information about the Baypiggies
mailing list