Python Warts
Python "warts" are things for which people have criticised Python, typically aspects of the language or mechanisms of its implementation, because such aspects either expose certain surprising inconsistencies, are regarded as omissions, or cause irritation for parts of the community in some sense. One goal of Python 3000 was to fix inconsistencies which could not have been fixed earlier due to the backwards compatibility constraints imposed on earlier releases of Python. This page summarises the unfixed warts, pitfalls and "gotchas" (which are not mere observations) from the following resources and lists Python 3000 remedies, if any:
Andrew Kuchling's "Python Warts" - now archived
Hans Nowak's "10 Python pitfalls" - now archived
Steven Ferg's "Python Gotchas" - now archived
Mark Lutz's "When Pythons Attack" - Archive
David Mertz's "Python elegance and warts", Part 1 and Part 2 - now archived
In the table below, the following terminology is used:
- No remedy: while some believe this to be a shortcoming, a lack of wider consensus has resulted in no remedy being pursued
Rejected: the shortcoming in question is regarded as a feature, typically because any attempt to remove it would arguably change the language in a way which would be even more confusing - see PEP 3099 for a list of such requested features
Note that the "What's New in Python 3.0" document also contains a list of changes in Python 3000. One can argue that many of the changes are useful fixes that were too mundane for people to write critiques about.
Shortcoming
Source
Python 3000 Remedy
No do statement
Kuchling
No remedy
Local variables and scoping
Kuchling, Nowak, Lutz
No remedy
Explicit self in methods
Kuchling
Rejected - this would require name declarations
Doubled underscores for private variables
Kuchling
No remedy
The .join() string method
Kuchling
No remedy
Inconsistent indentation
Nowak
Rejected - indentation is central to Python's syntax
The += operator
Nowak
No remedy
Class attributes vs instance attributes
Nowak
No remedy
Mutable default arguments
Nowak, Ferg, Lutz
No remedy
Omitting parentheses when invoking a method
Ferg, Lutz
Rejected - taking a reference to a function/method is a feature
Imports and reloading
Lutz
No remedy - improved reloading has been considered
Inconsistent/unpredictable comparisons/ordering
Mertz
No remedy
Deficient sequence support for iterators, generators
Mertz
No remedy
Attribute access mechanism proliferation
Mertz
No remedy - Mertz suggests standard decorators