Differences between revisions 3 and 4
Revision 3 as of 2008-02-02 01:43:27
Size: 4174
Editor: PaulBoddie
Comment: Added link to "What's New" document.
Revision 4 as of 2008-11-15 14:00:56
Size: 4204
Editor: localhost
Comment: converted to 1.6 markup
Deletions are marked like this. Additions are marked like this.
Line 5: Line 5:
 * Andrew Kuchling's [http://web.archive.org/web/20031002184114/www.amk.ca/python/writing/warts.html "Python Warts"] - now archived
 * Hans Nowak's [http://zephyrfalcon.org/labs/python_pitfalls.html "10 Python pitfalls"]
 * Steven Ferg's [http://www.ferg.org/projects/python_gotchas.html "Python Gotchas"]
 * Mark Lutz's [http://www.onlamp.com/pub/a/python/2004/02/05/learn_python.html "When Pythons Attack"]
 * David Mertz's "Python elegance and warts", [http://www.ibm.com/developerworks/linux/library/l-python-elegance-1.html Part 1] and [http://www.ibm.com/developerworks/linux/library/l-python-elegance-2.html Part 2]
 * Andrew Kuchling's [[http://web.archive.org/web/20031002184114/www.amk.ca/python/writing/warts.html|"Python Warts"]] - now archived
 * Hans Nowak's [[http://zephyrfalcon.org/labs/python_pitfalls.html|"10 Python pitfalls"]]
 * Steven Ferg's [[http://www.ferg.org/projects/python_gotchas.html|"Python Gotchas"]]
 * Mark Lutz's [[http://www.onlamp.com/pub/a/python/2004/02/05/learn_python.html|"When Pythons Attack"]]
 * David Mertz's "Python elegance and warts", [[http://www.ibm.com/developerworks/linux/library/l-python-elegance-1.html|Part 1]] and [[http://www.ibm.com/developerworks/linux/library/l-python-elegance-2.html|Part 2]]
Line 14: Line 14:
 * 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 [http://www.python.org/dev/peps/pep-3099/ PEP 3099] for a list of such requested features  * 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 [[http://www.python.org/dev/peps/pep-3099/|PEP 3099]] for a list of such requested features
Line 16: Line 16:
Note that the [http://docs.python.org/dev/3.0/whatsnew/3.0.html "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. Note that the [[http://docs.python.org/dev/3.0/whatsnew/3.0.html|"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.
Line 21: Line 21:
|| Calling base class methods ||<#F0F0F0> Kuchling || [http://www.python.org/dev/peps/pep-3135/ New Super] ||
|| Catching multiple exceptions ||<#F0F0F0> Kuchling, Nowak || [http://www.python.org/dev/peps/pep-3110/ Catching Exceptions in Python 3000] ||
|| Calling base class methods ||<#F0F0F0> Kuchling || [[http://www.python.org/dev/peps/pep-3135/|New Super]] ||
|| Catching multiple exceptions ||<#F0F0F0> Kuchling, Nowak || [[http://www.python.org/dev/peps/pep-3110/|Catching Exceptions in Python 3000]] ||
Line 26: Line 26:
|| print >> ||<#F0F0F0> Kuchling || [http://www.python.org/dev/peps/pep-3105/ Make print a function] || || print >> ||<#F0F0F0> Kuchling || [[http://www.python.org/dev/peps/pep-3105/|Make print a function]] ||
Line 31: Line 31:
|| [http://www.ferg.org/projects/python_gotchas.html#contents_item_1 Backslashes are escape characters] ||<#F0F0F0> Ferg || ''No remedy'' ||
|| [http://www.ferg.org/projects/python_gotchas.html#contents_item_4 Print and softspace] ||<#F0F0F0> Ferg || [http://www.python.org/dev/peps/pep-3105/ Make print a function] ||
|| [http://www.ferg.org/projects/python_gotchas.html#contents_item_5 Omitting parentheses when invoking a method] ||<#F0F0F0> Ferg, Lutz || ''Rejected'' - taking a reference to a function/method is a feature ||
|| [[http://www.ferg.org/projects/python_gotchas.html#contents_item_1|Backslashes are escape characters]] ||<#F0F0F0> Ferg || ''No remedy'' ||
|| [[http://www.ferg.org/projects/python_gotchas.html#contents_item_4|Print and softspace]] ||<#F0F0F0> Ferg || [[http://www.python.org/dev/peps/pep-3105/|Make print a function]] ||
|| [[http://www.ferg.org/projects/python_gotchas.html#contents_item_5|Omitting parentheses when invoking a method]] ||<#F0F0F0> Ferg, Lutz || ''Rejected'' - taking a reference to a function/method is a feature ||

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:

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

Calling base class methods

Kuchling

New Super

Catching multiple exceptions

Kuchling, Nowak

Catching Exceptions in Python 3000

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

print >>

Kuchling

Make print a function

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

Backslashes are escape characters

Ferg

No remedy

Print and softspace

Ferg

Make print a function

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

PythonWarts (last edited 2017-08-31 16:59:50 by BenSamuel)

Unable to edit the page? See the FrontPage for instructions.