\label{reporting-bugs}

Python is a mature programming language which has established a
reputation for stability.  In order to maintain this reputation, the
developers would like to know of any deficiencies you find in Python
or its documentation.

All bug reports should be submitted via the Python Bug Tracker on
SourceForge (\url{http://sourceforge.net/bugs/?group_id=5470}).  The
bug tracker offers a Web form which allows pertinent information to be
entered and submitted to the developers.

Before submitting a report, please log into SourceForge if you are a
member; this will make it possible for the developers to contact you
for additional information if needed.  If you are not a SourceForge
member but would not mind the developers contacting you, you may
include your email address in your bug description.  In this case,
please realize that the information is publically available and cannot
be protected.

The first step in filing a report is to determine whether the problem
has already been reported.  The advantage in doing so, aside from
saving the developers time, is that you learn what has been done to
fix it; it may be that the problem has already been fixed for the next
release, or additional information is needed (in which case you are
welcome to provide it if you can!).  To do this, search the bug
database using the search box near the bottom of the page.

If the problem you're reporting is not already in the bug tracker, go
back to the Python Bug Tracker
(\url{http://sourceforge.net/bugs/?group_id=5470}).  Select the
``Submit a Bug'' link at the top of the page to open the bug reporting
form.

The submission form has a number of fields.  The only fields that are
required are the ``Summary'' and ``Details'' fields.  For the summary,
enter a \emph{very} short description of the problem; less than ten
words is good.  In the Details field, describe the problem in detail,
including what you expected to happen and what did happen.  Be sure to
include the version of Python you used, whether any extension modules
were involved, and what hardware and software platform you were using
(including version information as appropriate).

The only other field that you may want to set is the ``Category''
field, which allows you to place the bug report into a broad category
(such as ``Documentation'' or ``Library'').

Each bug report will be assigned to a developer who will determine
what needs to be done to correct the problem.  If you have a
SourceForge account and logged in to report the problem, you will
receive an update each time action is taken on the bug.


\begin{seealso}
  \seetitle[http://www-mice.cs.ucl.ac.uk/multimedia/software/documentation/ReportingBugs.html]{How
        to Report Bugs Effectively}{Article which goes into some
        detail about how to create a useful bug report.  This
        describes what kind of information is useful and why it is
        useful.}

  \seetitle[http://www.mozilla.org/quality/bug-writing-guidelines.html]{Bug
        Writing Guidelines}{Information about writing a good bug
        report.  Some of this is specific to the Mozilla project, but
        describes general good practices.}
\end{seealso}
