On Wed, 04 Apr 2012 15:34:20 -0700, 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).
The GIL prevents Python from taking advantage of multiple cores in your CPU when using multiple threads. Solution: use a GIL-less Python, like IronPython or Jython, or use multiple processes instead of threads. exec() and execfile() are unintuitive if you supply separate dicts for the globals and locals arguments. http://bugs.python.org/issue1167300 http://bugs.python.org/issue14049 Note that both of these are flagged as WON'T FIX. Solution: to emulate top-level code, pass the same dict as globals and locals. max() and min() fail with a single argument: max(2, 3) => 3 max(3) => raises exception Solution: don't do that. Or pass a list: max([2, 3]) => 3 max([3]) => 3 Splitting on None and splitting on space is not identical: "".split() => [] "".split(' ') => [''] JSON expects double-quote marks, not single: v = json.loads("{'test':'test'}") fails v = json.loads('{"test":"test"}') succeeds If you decorate a function, by default the docstring is lost. @decorate def spam(x, y): """blah blah blah blah""" spam.__doc__ => raises exception Solution: make sure your decorator uses functools.wraps(). -- Steven -- http://mail.python.org/mailman/listinfo/python-list