On 04/04/12 17:34, Miki Tebeka wrote:
Greetings,

I'm going to give a "Python Gotcha's" talk at work.
If you have an interesting/common "Gotcha" (warts/dark corners ...) please 
share.

(Note that I want over http://wiki.python.org/moin/PythonWarts already).

1) While I believe it was fixed in more recent releases (perhaps Py3 or later, most of my code is still in 2.x), leaking of list-comprehension variables into the surrounding scope has stung me on occasion:

  val = something_important
  whatever = [val for val in iterable if condition(val)]
  assert val == something_important, "ug!"


2) While totally understandable, the significance of leading whitespace in docstrings/triple-quoted items occasionally catches me in places I didn't intentionally want it:

  class Foo:
    def frobniculate(self, x, y):
      """Frobniculate the x & y
      x is the macrowobble variance
      y is the miniwibble grobulation
      """
      pass

(there's now leading whitespace on lines 2 & 3, and an extra trailing line of pure whitespace).

3) the peculiarities of old-style classes and new-style classes in 2.x (mooted by 3.x) take careful reading of the docs if you're overriding __getattr__ or __getattribute__, as well as possible other old-vs-new gotchas.

4) the __del__ method may have things in the containing scopes (such as modules imported at the top of the containing module) that get garbage-collected before the __del__ is called. In general, __del__ stinks, and is better replaced by "with" statements using context managers.

5) the masking of system modules. On multiple occasions I've created a local module named "email.py", and then upon importing something else (I think it may have been smtplib...not sure), it failed with a confusing error because the imported module found mine rather than the system module.

Those are my off-the-top-of-the-head gotchas.

-tkc




--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to