Python seems all the rage these days, and not undeservingly - for it is truly a language with which one almost enjoys being given a new problem to solve. But, as a wise man once said (calling him a wise man only because I've no idea as to who actually said it; not sure whether he was that wise at all), to really know a language one does not only know its syntax, design, etc., advantages but also its drawbacks. No language is perfect, some are just better than others.

So, what would be in your opinion, objective drawbacks of Python.

Note: I'm not asking for a language comparison here (i.e. C# is better than Python because ... yadda yadda yadda) - more of an objective (to some level) opinion which language features are badly designed, whether, what are maybe some you're missing in it and so on. If must use another language as a comparison, but only to illustrate a point which would be hard to elaborate on otherwise (i.e. for ease of understanding)

I use Python somewhat regularly, and overall I consider it to be a very good language.  Nonetheless, no language is perfect.  Here are the drawbacks in order of importance to me personally:


It's slow.  I mean really, really slow.  A lot of times this doesn't matter, but it definitely means you'll need another language for those performance-critical bits.
Nested functions kind of suck in that you can't modify variables in the outer scope.  Edit:  I still use Python 2 due to library support, and this design flaw irritates the heck out of me, but apparently it's fixed in Python 3 due to the nonlocal statement.  Can't wait for the libs I use to be ported so this flaw can be sent to the ash heap of history for good.
It's missing a few features that can be useful to library/generic code and IMHO are simplicity taken to unhealthy extremes.  The most important ones I can think of are user-defined value types (I'm guessing these can be created with metaclass magic, but I've never tried), and ref function parameter.
It's far from the metal.  Need to write threading primitives or kernel code or something?  Good luck.
While I don't mind the lack of ability to catch semantic errors upfront as a tradeoff for the dynamism that Python offers, I wish there were a way to catch syntactic errors and silly things like mistyping variable names without having to actually run the code.
The documentation isn't as good as languages like PHP and Java that have strong corporate backings.

