Issue #26778: Fixed "a/an/and" typos in code comment and documentation.
diff --git a/Demo/tix/samples/Balloon.py b/Demo/tix/samples/Balloon.py
index 2295905..576b4ed 100644
--- a/Demo/tix/samples/Balloon.py
+++ b/Demo/tix/samples/Balloon.py
@@ -11,7 +11,7 @@
 # program.
 
 # This file demonstrates the use of the tixBalloon widget, which provides
-# a interesting way to give help tips about elements in your user interface.
+# an interesting way to give help tips about elements in your user interface.
 # Your can display the help message in a "balloon" and a status bar widget.
 #
 
diff --git a/Demo/tix/samples/CmpImg.py b/Demo/tix/samples/CmpImg.py
index 4720a10..8b33579 100644
--- a/Demo/tix/samples/CmpImg.py
+++ b/Demo/tix/samples/CmpImg.py
@@ -155,7 +155,7 @@
     net = Tix.Button(w, padx=4, pady=1, width=120)
 
     # Create the first image: we create a line, then put a string,
-    # a space and a image into this line, from left to right.
+    # a space and an image into this line, from left to right.
     # The result: we have a one-line image that consists of three
     # individual items
     #
diff --git a/Doc/c-api/object.rst b/Doc/c-api/object.rst
index 50b83e9..1f0bd17 100644
--- a/Doc/c-api/object.rst
+++ b/Doc/c-api/object.rst
@@ -157,7 +157,7 @@
 
    .. index:: builtin: bytes
 
-   Compute a bytes representation of object *o*.  In 2.x, this is just a alias
+   Compute a bytes representation of object *o*.  In 2.x, this is just an alias
    for :c:func:`PyObject_Str`.
 
 
diff --git a/Doc/c-api/set.rst b/Doc/c-api/set.rst
index 258530b..f6ebcf3 100644
--- a/Doc/c-api/set.rst
+++ b/Doc/c-api/set.rst
@@ -140,7 +140,7 @@
    Add *key* to a :class:`set` instance.  Does not apply to :class:`frozenset`
    instances.  Return 0 on success or -1 on failure. Raise a :exc:`TypeError` if
    the *key* is unhashable. Raise a :exc:`MemoryError` if there is no room to grow.
-   Raise a :exc:`SystemError` if *set* is an not an instance of :class:`set` or its
+   Raise a :exc:`SystemError` if *set* is not an instance of :class:`set` or its
    subtype.
 
    .. versionchanged:: 2.6
@@ -158,7 +158,7 @@
    error is encountered.  Does not raise :exc:`KeyError` for missing keys.  Raise a
    :exc:`TypeError` if the *key* is unhashable.  Unlike the Python :meth:`~set.discard`
    method, this function does not automatically convert unhashable sets into
-   temporary frozensets. Raise :exc:`PyExc_SystemError` if *set* is an not an
+   temporary frozensets. Raise :exc:`PyExc_SystemError` if *set* is not an
    instance of :class:`set` or its subtype.
 
 
@@ -166,7 +166,7 @@
 
    Return a new reference to an arbitrary object in the *set*, and removes the
    object from the *set*.  Return *NULL* on failure.  Raise :exc:`KeyError` if the
-   set is empty. Raise a :exc:`SystemError` if *set* is an not an instance of
+   set is empty. Raise a :exc:`SystemError` if *set* is not an instance of
    :class:`set` or its subtype.
 
 
diff --git a/Doc/c-api/unicode.rst b/Doc/c-api/unicode.rst
index 3262354..85800c5 100644
--- a/Doc/c-api/unicode.rst
+++ b/Doc/c-api/unicode.rst
@@ -260,7 +260,7 @@
    | :attr:`%%`        | *n/a*               | The literal % character.       |
    +-------------------+---------------------+--------------------------------+
    | :attr:`%c`        | int                 | A single character,            |
-   |                   |                     | represented as an C int.       |
+   |                   |                     | represented as a C int.        |
    +-------------------+---------------------+--------------------------------+
    | :attr:`%d`        | int                 | Exactly equivalent to          |
    |                   |                     | ``printf("%d")``.              |
diff --git a/Doc/distutils/apiref.rst b/Doc/distutils/apiref.rst
index 96a486b..d33eab6 100644
--- a/Doc/distutils/apiref.rst
+++ b/Doc/distutils/apiref.rst
@@ -832,7 +832,7 @@
 .. module:: distutils.bcppcompiler
 
 
-This module provides :class:`BorlandCCompiler`, an subclass of the abstract
+This module provides :class:`BorlandCCompiler`, a subclass of the abstract
 :class:`CCompiler` class for the Borland C++ compiler.
 
 
diff --git a/Doc/howto/urllib2.rst b/Doc/howto/urllib2.rst
index 42e84d3..3cac993 100644
--- a/Doc/howto/urllib2.rst
+++ b/Doc/howto/urllib2.rst
@@ -6,7 +6,7 @@
 
 .. note::
 
-    There is an French translation of an earlier revision of this
+    There is a French translation of an earlier revision of this
     HOWTO, available at `urllib2 - Le Manuel manquant
     <http://www.voidspace.org.uk/python/articles/urllib2_francais.shtml>`_.
 
diff --git a/Doc/library/ctypes.rst b/Doc/library/ctypes.rst
index e58d954..cbf0e35 100644
--- a/Doc/library/ctypes.rst
+++ b/Doc/library/ctypes.rst
@@ -657,7 +657,7 @@
 
    TenPointsArrayType = POINT * 10
 
-Here is an example of an somewhat artificial data type, a structure containing 4
+Here is an example of a somewhat artificial data type, a structure containing 4
 POINTs among other stuff::
 
    >>> from ctypes import *
@@ -1576,7 +1576,7 @@
       tuple, this method allows adapting the actual argument to an object that
       the foreign function accepts.  For example, a :class:`c_char_p` item in
       the :attr:`argtypes` tuple will convert a unicode string passed as
-      argument into an byte string using ctypes conversion rules.
+      argument into a byte string using ctypes conversion rules.
 
       New: It is now possible to put items in argtypes which are not ctypes
       types, but each item must have a :meth:`from_param` method which returns a
@@ -1964,7 +1964,7 @@
 .. function:: POINTER(type)
 
    This factory function creates and returns a new ctypes pointer type. Pointer
-   types are cached an reused internally, so calling this function repeatedly is
+   types are cached and reused internally, so calling this function repeatedly is
    cheap. *type* must be a ctypes type.
 
 
diff --git a/Doc/library/fl.rst b/Doc/library/fl.rst
index c689372..b755134 100644
--- a/Doc/library/fl.rst
+++ b/Doc/library/fl.rst
@@ -310,7 +310,7 @@
 
 .. method:: form.add_input(type, x, y, w, h, name)
 
-   Add a input object to the form.  ---  Methods: :meth:`set_input`,
+   Add an input object to the form.  ---  Methods: :meth:`set_input`,
    :meth:`get_input`, :meth:`set_input_color`, :meth:`set_input_return`.
 
 
diff --git a/Doc/library/idle.rst b/Doc/library/idle.rst
index 4384d56..df08fe8 100644
--- a/Doc/library/idle.rst
+++ b/Doc/library/idle.rst
@@ -128,7 +128,7 @@
    Search for the currently selected string, if there is one.
 
 Find in Files...
-   Open a file search dialog.  Put results in an new output window.
+   Open a file search dialog.  Put results in a new output window.
 
 Replace...
    Open a search-and-replace dialog.
diff --git a/Doc/library/marshal.rst b/Doc/library/marshal.rst
index f4dfc1f..0698834 100644
--- a/Doc/library/marshal.rst
+++ b/Doc/library/marshal.rst
@@ -66,7 +66,7 @@
 .. function:: dump(value, file[, version])
 
    Write the value on the open file.  The value must be a supported type.  The
-   file must be a open file object such as ``sys.stdout`` or returned by
+   file must be an open file object such as ``sys.stdout`` or returned by
    :func:`open` or :func:`os.popen`.  It may not be a wrapper such as
    TemporaryFile on Windows. It must be opened in binary mode (``'wb'``
    or ``'w+b'``).
diff --git a/Doc/library/pyexpat.rst b/Doc/library/pyexpat.rst
index 0c8e7fc..f0b6bc3 100644
--- a/Doc/library/pyexpat.rst
+++ b/Doc/library/pyexpat.rst
@@ -788,7 +788,7 @@
 .. data:: XML_ERROR_UNDEFINED_ENTITY
    :noindex:
 
-   A reference was made to a entity which was not defined.
+   A reference was made to an entity which was not defined.
 
 
 .. data:: XML_ERROR_UNKNOWN_ENCODING
diff --git a/Doc/library/restricted.rst b/Doc/library/restricted.rst
index a40d1e9..80f6344 100644
--- a/Doc/library/restricted.rst
+++ b/Doc/library/restricted.rst
@@ -34,7 +34,7 @@
 *mode* parameter is ``'w'``.  It might also perform a :c:func:`chroot`\ -like
 operation on the *filename* parameter, such that root is always relative to some
 safe "sandbox" area of the filesystem.  In this case, the untrusted code would
-still see an built-in :func:`open` function in its environment, with the same
+still see a built-in :func:`open` function in its environment, with the same
 calling interface.  The semantics would be identical too, with :exc:`IOError`\ s
 being raised when the supervisor determined that an unallowable parameter is
 being used.
diff --git a/Doc/library/sgmllib.rst b/Doc/library/sgmllib.rst
index 84911fe..bffd535 100644
--- a/Doc/library/sgmllib.rst
+++ b/Doc/library/sgmllib.rst
@@ -162,7 +162,7 @@
 .. method:: SGMLParser.handle_entityref(ref)
 
    This method is called to process a general entity reference of the form
-   ``&ref;`` where *ref* is an general entity reference.  It converts *ref* by
+   ``&ref;`` where *ref* is a general entity reference.  It converts *ref* by
    passing it to :meth:`convert_entityref`.  If a translation is returned, it calls
    the method :meth:`handle_data` with the translation; otherwise, it calls the
    method ``unknown_entityref(ref)``. The default :attr:`entitydefs` defines
diff --git a/Doc/library/sunaudio.rst b/Doc/library/sunaudio.rst
index 187204e..f09a4d6 100644
--- a/Doc/library/sunaudio.rst
+++ b/Doc/library/sunaudio.rst
@@ -123,7 +123,7 @@
 .. method:: audio device.setinfo(status)
 
    This method sets the audio device status parameters. The *status* parameter is
-   an device status object as returned by :func:`getinfo` and possibly modified by
+   a device status object as returned by :func:`getinfo` and possibly modified by
    the program.
 
 
diff --git a/Doc/library/tarfile.rst b/Doc/library/tarfile.rst
index e3d006e..ba4b3e0 100644
--- a/Doc/library/tarfile.rst
+++ b/Doc/library/tarfile.rst
@@ -110,10 +110,10 @@
    +-------------+--------------------------------------------+
    | ``'w|'``    | Open an uncompressed *stream* for writing. |
    +-------------+--------------------------------------------+
-   | ``'w|gz'``  | Open an gzip compressed *stream* for       |
+   | ``'w|gz'``  | Open a gzip compressed *stream* for        |
    |             | writing.                                   |
    +-------------+--------------------------------------------+
-   | ``'w|bz2'`` | Open an bzip2 compressed *stream* for      |
+   | ``'w|bz2'`` | Open a bzip2 compressed *stream* for       |
    |             | writing.                                   |
    +-------------+--------------------------------------------+
 
diff --git a/Doc/library/tix.rst b/Doc/library/tix.rst
index a2f31a0..8626cd8 100644
--- a/Doc/library/tix.rst
+++ b/Doc/library/tix.rst
@@ -276,7 +276,7 @@
 
    The `ExFileSelectBox
    <http://tix.sourceforge.net/dist/current/man/html/TixCmd/tixExFileSelectBox.htm>`_
-   widget is usually embedded in a tixExFileSelectDialog widget. It provides an
+   widget is usually embedded in a tixExFileSelectDialog widget. It provides a
    convenient method for the user to select files. The style of the
    :class:`ExFileSelectBox` widget is very similar to the standard file dialog on
    MS Windows 3.1.
diff --git a/Doc/library/urllib.rst b/Doc/library/urllib.rst
index 927696a..91deb39 100644
--- a/Doc/library/urllib.rst
+++ b/Doc/library/urllib.rst
@@ -280,7 +280,7 @@
 
 .. function:: url2pathname(path)
 
-   Convert the path component *path* from an percent-encoded URL to the local syntax for a
+   Convert the path component *path* from a percent-encoded URL to the local syntax for a
    path.  This does not accept a complete URL.  This function uses :func:`unquote`
    to decode *path*.
 
diff --git a/Doc/tutorial/datastructures.rst b/Doc/tutorial/datastructures.rst
index 48faa9c..0e5891a 100644
--- a/Doc/tutorial/datastructures.rst
+++ b/Doc/tutorial/datastructures.rst
@@ -452,7 +452,7 @@
 
 Though tuples may seem similar to lists, they are often used in different
 situations and for different purposes.
-Tuples are :term:`immutable`, and usually contain an heterogeneous sequence of
+Tuples are :term:`immutable`, and usually contain a heterogeneous sequence of
 elements that are accessed via unpacking (see later in this section) or indexing
 (or even by attribute in the case of :func:`namedtuples <collections.namedtuple>`).
 Lists are :term:`mutable`, and their elements are usually homogeneous and are
diff --git a/Doc/tutorial/introduction.rst b/Doc/tutorial/introduction.rst
index 40c0201..a4fb70c 100644
--- a/Doc/tutorial/introduction.rst
+++ b/Doc/tutorial/introduction.rst
@@ -307,7 +307,7 @@
 indices, if both are within bounds.  For example, the length of ``word[1:3]`` is
 2.
 
-Attempting to use a index that is too large will result in an error::
+Attempting to use an index that is too large will result in an error::
 
    >>> word[42]  # the word only has 6 characters
    Traceback (most recent call last):
diff --git a/Doc/whatsnew/2.2.rst b/Doc/whatsnew/2.2.rst
index 421846d..212ed04 100644
--- a/Doc/whatsnew/2.2.rst
+++ b/Doc/whatsnew/2.2.rst
@@ -720,7 +720,7 @@
 
 (The controversy is over whether this is *really* a design flaw, and whether
 it's worth breaking existing code to fix this.  It's caused endless discussions
-on python-dev, and in July 2001 erupted into an storm of acidly sarcastic
+on python-dev, and in July 2001 erupted into a storm of acidly sarcastic
 postings on :newsgroup:`comp.lang.python`. I won't argue for either side here
 and will stick to describing what's  implemented in 2.2.  Read :pep:`238` for a
 summary of arguments and counter-arguments.)
diff --git a/Doc/whatsnew/2.3.rst b/Doc/whatsnew/2.3.rst
index 5db3e24..f9c4547 100644
--- a/Doc/whatsnew/2.3.rst
+++ b/Doc/whatsnew/2.3.rst
@@ -411,7 +411,7 @@
 
 A new built-in function, :func:`enumerate`, will make certain loops a bit
 clearer.  ``enumerate(thing)``, where *thing* is either an iterator or a
-sequence, returns a iterator that will return ``(0, thing[0])``, ``(1,
+sequence, returns an iterator that will return ``(0, thing[0])``, ``(1,
 thing[1])``, ``(2, thing[2])``, and so forth.
 
 A common idiom to change every element of a list looks like this::
diff --git a/Include/listobject.h b/Include/listobject.h
index 7cd616b..f19b1c5 100644
--- a/Include/listobject.h
+++ b/Include/listobject.h
@@ -2,7 +2,7 @@
 /* List object interface */
 
 /*
-Another generally useful object type is an list of object pointers.
+Another generally useful object type is a list of object pointers.
 This is a mutable type: the list items can be changed, and items can be
 added or removed.  Out-of-range indices or non-list objects are ignored.
 
diff --git a/Lib/SocketServer.py b/Lib/SocketServer.py
index d324a21..122430e 100644
--- a/Lib/SocketServer.py
+++ b/Lib/SocketServer.py
@@ -707,7 +707,7 @@
             try:
                 self.wfile.flush()
             except socket.error:
-                # An final socket error may have occurred here, such as
+                # A final socket error may have occurred here, such as
                 # the local error ECONNABORTED.
                 pass
         self.wfile.close()
diff --git a/Lib/_pyio.py b/Lib/_pyio.py
index 694b778..d8e1ee7 100644
--- a/Lib/_pyio.py
+++ b/Lib/_pyio.py
@@ -420,7 +420,7 @@
         return self.__closed
 
     def _checkClosed(self, msg=None):
-        """Internal: raise an ValueError if file is closed
+        """Internal: raise a ValueError if file is closed
         """
         if self.closed:
             raise ValueError("I/O operation on closed file."
@@ -2022,7 +2022,7 @@
 
     def __repr__(self):
         # TextIOWrapper tells the encoding in its repr. In StringIO,
-        # that's a implementation detail.
+        # that's an implementation detail.
         return object.__repr__(self)
 
     @property
diff --git a/Lib/calendar.py b/Lib/calendar.py
index d3bd236..4c95a49 100644
--- a/Lib/calendar.py
+++ b/Lib/calendar.py
@@ -142,7 +142,7 @@
 
     def iterweekdays(self):
         """
-        Return a iterator for one week of weekday numbers starting with the
+        Return an iterator for one week of weekday numbers starting with the
         configured first one.
         """
         for i in range(self.firstweekday, self.firstweekday + 7):
diff --git a/Lib/decimal.py b/Lib/decimal.py
index d274552..20d9468 100644
--- a/Lib/decimal.py
+++ b/Lib/decimal.py
@@ -224,7 +224,7 @@
 class ConversionSyntax(InvalidOperation):
     """Trying to convert badly formed string.
 
-    This occurs and signals invalid-operation if an string is being
+    This occurs and signals invalid-operation if a string is being
     converted to a number and it does not conform to the numeric string
     syntax.  The result is [0,qNaN].
     """
diff --git a/Lib/difflib.py b/Lib/difflib.py
index 3880d84..1c6fbdb 100644
--- a/Lib/difflib.py
+++ b/Lib/difflib.py
@@ -1487,7 +1487,7 @@
                 yield _make_line(lines,'-',0), None, True
                 continue
             elif s.startswith(('--?+', '--+', '- ')):
-                # in delete block and see a intraline change or unchanged line
+                # in delete block and see an intraline change or unchanged line
                 # coming: yield the delete line and then blanks
                 from_line,to_line = _make_line(lines,'-',0), None
                 num_blanks_to_yield,num_blanks_pending = num_blanks_pending-1,0
diff --git a/Lib/distutils/cygwinccompiler.py b/Lib/distutils/cygwinccompiler.py
index 5d11687..c72a249 100644
--- a/Lib/distutils/cygwinccompiler.py
+++ b/Lib/distutils/cygwinccompiler.py
@@ -10,9 +10,9 @@
 #
 # * if you use a msvc compiled python version (1.5.2)
 #   1. you have to insert a __GNUC__ section in its config.h
-#   2. you have to generate a import library for its dll
+#   2. you have to generate an import library for its dll
 #      - create a def-file for python??.dll
-#      - create a import library using
+#      - create an import library using
 #             dlltool --dllname python15.dll --def python15.def \
 #                       --output-lib libpython15.a
 #
diff --git a/Lib/getopt.py b/Lib/getopt.py
index 251d89c..084aadb 100644
--- a/Lib/getopt.py
+++ b/Lib/getopt.py
@@ -28,7 +28,7 @@
 # - RETURN_IN_ORDER option
 # - GNU extension with '-' as first character of option string
 # - optional arguments, specified by double colons
-# - a option string with a W followed by semicolon should
+# - an option string with a W followed by semicolon should
 #   treat "-W foo" as "--foo"
 
 __all__ = ["GetoptError","error","getopt","gnu_getopt"]
diff --git a/Lib/idlelib/AutoComplete.py b/Lib/idlelib/AutoComplete.py
index 1248f00..5a90d42 100644
--- a/Lib/idlelib/AutoComplete.py
+++ b/Lib/idlelib/AutoComplete.py
@@ -67,7 +67,7 @@
 
     def try_open_completions_event(self, event):
         """Happens when it would be nice to open a completion list, but not
-        really necessary, for example after an dot, so function
+        really necessary, for example after a dot, so function
         calls won't be made.
         """
         lastchar = self.text.get("insert-1c")
diff --git a/Lib/idlelib/Debugger.py b/Lib/idlelib/Debugger.py
index 7fbe4a7..c517065 100644
--- a/Lib/idlelib/Debugger.py
+++ b/Lib/idlelib/Debugger.py
@@ -373,7 +373,7 @@
     def __init__(self, master, flist, gui):
         if macosxSupport.isAquaTk():
             # At least on with the stock AquaTk version on OSX 10.4 you'll
-            # get an shaking GUI that eventually kills IDLE if the width
+            # get a shaking GUI that eventually kills IDLE if the width
             # argument is specified.
             ScrolledList.__init__(self, master)
         else:
diff --git a/Lib/idlelib/WidgetRedirector.py b/Lib/idlelib/WidgetRedirector.py
index 2cb9398..54431f7 100644
--- a/Lib/idlelib/WidgetRedirector.py
+++ b/Lib/idlelib/WidgetRedirector.py
@@ -68,7 +68,7 @@
         '''Return OriginalCommand(operation) after registering function.
 
         Registration adds an operation: function pair to ._operations.
-        It also adds an widget function attribute that masks the Tkinter
+        It also adds a widget function attribute that masks the Tkinter
         class instance method.  Method masking operates independently
         from command dispatch.
 
diff --git a/Lib/idlelib/configDialog.py b/Lib/idlelib/configDialog.py
index 585a871..671882b 100644
--- a/Lib/idlelib/configDialog.py
+++ b/Lib/idlelib/configDialog.py
@@ -1213,7 +1213,7 @@
 
         All values are treated as text, and it is up to the user to supply
         reasonable values. The only exception to this are the 'enable*' options,
-        which are boolean, and can be toggled with an True/False button.
+        which are boolean, and can be toggled with a True/False button.
         """
         parent = self.parent
         frame = self.tabPages.pages['Extensions'].frame
diff --git a/Lib/lib-tk/Tix.py b/Lib/lib-tk/Tix.py
index 1f28e56..d723e47 100644
--- a/Lib/lib-tk/Tix.py
+++ b/Lib/lib-tk/Tix.py
@@ -221,7 +221,7 @@
         self.tk.eval('package require Tix')
 
     def destroy(self):
-        # For safety, remove an delete_window binding before destroy
+        # For safety, remove the delete_window binding before destroy
         self.protocol("WM_DELETE_WINDOW", "")
         Tkinter.Tk.destroy(self)
 
@@ -702,7 +702,7 @@
 
 class ExFileSelectBox(TixWidget):
     """ExFileSelectBox - MS Windows style file select box.
-    It provides an convenient method for the user to select files.
+    It provides a convenient method for the user to select files.
 
     Subwidget       Class
     ---------       -----
@@ -760,7 +760,7 @@
 # Should inherit from a Dialog class
 class ExFileSelectDialog(TixWidget):
     """ExFileSelectDialog - MS Windows style file select dialog.
-    It provides an convenient method for the user to select files.
+    It provides a convenient method for the user to select files.
 
     Subwidgets       Class
     ----------       -----
diff --git a/Lib/lib-tk/Tkdnd.py b/Lib/lib-tk/Tkdnd.py
index 2e37d9e..1b09f91 100644
--- a/Lib/lib-tk/Tkdnd.py
+++ b/Lib/lib-tk/Tkdnd.py
@@ -3,7 +3,7 @@
 This is very preliminary.  I currently only support dnd *within* one
 application, between different windows (or within the same window).
 
-I an trying to make this as generic as possible -- not dependent on
+I am trying to make this as generic as possible -- not dependent on
 the use of a particular widget or icon type, etc.  I also hope that
 this will work with Pmw.
 
diff --git a/Lib/lib-tk/Tkinter.py b/Lib/lib-tk/Tkinter.py
index d8d5b80..7944819 100644
--- a/Lib/lib-tk/Tkinter.py
+++ b/Lib/lib-tk/Tkinter.py
@@ -2778,7 +2778,7 @@
                     self.deletecommand(c)
         self.tk.call(self._w, 'delete', index1, index2)
     def entrycget(self, index, option):
-        """Return the resource value of an menu item for OPTION at INDEX."""
+        """Return the resource value of a menu item for OPTION at INDEX."""
         return self.tk.call(self._w, 'entrycget', index, '-' + option)
     def entryconfigure(self, index, cnf=None, **kw):
         """Configure a menu item at INDEX."""
diff --git a/Lib/lib-tk/test/test_ttk/test_functions.py b/Lib/lib-tk/test/test_ttk/test_functions.py
index 714d950..ea3f81c 100644
--- a/Lib/lib-tk/test/test_ttk/test_functions.py
+++ b/Lib/lib-tk/test/test_ttk/test_functions.py
@@ -195,7 +195,7 @@
 
         ## Testing type = vsapi
         # vsapi type expects at least a class name and a part_id, so this
-        # should raise an ValueError since it tries to get two elements from
+        # should raise a ValueError since it tries to get two elements from
         # an empty tuple
         self.assertRaises(ValueError, ttk._format_elemcreate, 'vsapi')
 
diff --git a/Lib/lib-tk/ttk.py b/Lib/lib-tk/ttk.py
index 08cb040..fe73aef 100644
--- a/Lib/lib-tk/ttk.py
+++ b/Lib/lib-tk/ttk.py
@@ -291,7 +291,7 @@
     """Format options then call Tk command with args and options and return
     the appropriate result.
 
-    If no option is specified, a dict is returned. If a option is
+    If no option is specified, a dict is returned. If an option is
     specified with the None value, the value for that option is returned.
     Otherwise, the function just sets the passed options and the caller
     shouldn't be expecting a return value anyway."""
@@ -1476,7 +1476,7 @@
     can be accessed through instance.label"""
 
     def __init__(self, master=None, variable=None, from_=0, to=10, **kw):
-        """Construct an horizontal LabeledScale with parent master, a
+        """Construct a horizontal LabeledScale with parent master, a
         variable to be associated with the Ttk Scale widget and its range.
         If variable is not specified, a Tkinter.IntVar is created.
 
diff --git a/Lib/lib2to3/fixer_base.py b/Lib/lib2to3/fixer_base.py
index f6421ba..d437b96 100644
--- a/Lib/lib2to3/fixer_base.py
+++ b/Lib/lib2to3/fixer_base.py
@@ -50,7 +50,7 @@
         """Initializer.  Subclass may override.
 
         Args:
-            options: an dict containing the options passed to RefactoringTool
+            options: a dict containing the options passed to RefactoringTool
             that could be used to customize the fixer through the command line.
             log: a list to append warnings and other messages to.
         """
diff --git a/Lib/lib2to3/refactor.py b/Lib/lib2to3/refactor.py
index bd23897..98386c5 100644
--- a/Lib/lib2to3/refactor.py
+++ b/Lib/lib2to3/refactor.py
@@ -184,7 +184,7 @@
 
         Args:
             fixer_names: a list of fixers to import
-            options: an dict with configuration.
+            options: a dict with configuration.
             explicit: a list of fixers to run even if they are explicit.
         """
         self.fixers = fixer_names
diff --git a/Lib/mailbox.py b/Lib/mailbox.py
index 3866953..b1e5faa 100644
--- a/Lib/mailbox.py
+++ b/Lib/mailbox.py
@@ -1774,7 +1774,7 @@
     """Message with Babyl-specific properties."""
 
     def __init__(self, message=None):
-        """Initialize an BabylMessage instance."""
+        """Initialize a BabylMessage instance."""
         self._labels = []
         self._visible = Message()
         Message.__init__(self, message)
diff --git a/Lib/multiprocessing/managers.py b/Lib/multiprocessing/managers.py
index 08d35d8..7763965 100644
--- a/Lib/multiprocessing/managers.py
+++ b/Lib/multiprocessing/managers.py
@@ -884,7 +884,7 @@
 
 def MakeProxyType(name, exposed, _cache={}):
     '''
-    Return an proxy type whose methods are given by `exposed`
+    Return a proxy type whose methods are given by `exposed`
     '''
     exposed = tuple(exposed)
     try:
diff --git a/Lib/optparse.py b/Lib/optparse.py
index 433276d..f8c70dd 100644
--- a/Lib/optparse.py
+++ b/Lib/optparse.py
@@ -1375,7 +1375,7 @@
         sys.argv[1:]).  Any errors result in a call to 'error()', which
         by default prints the usage message to stderr and calls
         sys.exit() with an error message.  On success returns a pair
-        (values, args) where 'values' is an Values instance (with all
+        (values, args) where 'values' is a Values instance (with all
         your option values) and 'args' is the list of arguments left
         over after parsing options.
         """
diff --git a/Lib/plat-irix5/flp.py b/Lib/plat-irix5/flp.py
index 13c926f..f06e7f8 100644
--- a/Lib/plat-irix5/flp.py
+++ b/Lib/plat-irix5/flp.py
@@ -329,7 +329,7 @@
 #################################################################
 
 #
-# External - Create a form an link to an instance variable.
+# External - Create a form and link to an instance variable.
 #
 def create_full_form(inst, (fdata, odatalist)):
     form = create_form(fdata)
diff --git a/Lib/plat-irix6/flp.py b/Lib/plat-irix6/flp.py
index 32e8b9d..14231cb 100644
--- a/Lib/plat-irix6/flp.py
+++ b/Lib/plat-irix6/flp.py
@@ -328,7 +328,7 @@
 #################################################################
 
 #
-# External - Create a form an link to an instance variable.
+# External - Create a form and link to an instance variable.
 #
 def create_full_form(inst, (fdata, odatalist)):
     form = create_form(fdata)
diff --git a/Lib/plat-mac/lib-scriptpackages/Finder/Files.py b/Lib/plat-mac/lib-scriptpackages/Finder/Files.py
index ddbe1ba..0afdc04 100644
--- a/Lib/plat-mac/lib-scriptpackages/Finder/Files.py
+++ b/Lib/plat-mac/lib-scriptpackages/Finder/Files.py
@@ -102,7 +102,7 @@
 files = file
 
 class internet_location_file(aetools.ComponentItem):
-    """internet location file - An file containing an internet location """
+    """internet location file - A file containing an internet location """
     want = 'inlf'
 class _Prop_location(aetools.NProperty):
     """location - the internet location """
diff --git a/Lib/plat-mac/lib-scriptpackages/SystemEvents/Processes_Suite.py b/Lib/plat-mac/lib-scriptpackages/SystemEvents/Processes_Suite.py
index 9dcb85f..ff7be3c 100644
--- a/Lib/plat-mac/lib-scriptpackages/SystemEvents/Processes_Suite.py
+++ b/Lib/plat-mac/lib-scriptpackages/SystemEvents/Processes_Suite.py
@@ -58,7 +58,7 @@
 application_processes = application_process
 
 class desk_accessory_process(aetools.ComponentItem):
-    """desk accessory process - A process launched from an desk accessory file """
+    """desk accessory process - A process launched from a desk accessory file """
     want = 'pcda'
 class _Prop_desk_accessory_file(aetools.NProperty):
     """desk accessory file - a reference to the desk accessory file from which this process was launched """
diff --git a/Lib/socket.py b/Lib/socket.py
index 614af29..437634c 100644
--- a/Lib/socket.py
+++ b/Lib/socket.py
@@ -549,7 +549,7 @@
     global default timeout setting returned by :func:`getdefaulttimeout`
     is used.  If *source_address* is set it must be a tuple of (host, port)
     for the socket to bind as a source address before making the connection.
-    An host of '' or port 0 tells the OS to use the default.
+    A host of '' or port 0 tells the OS to use the default.
     """
 
     host, port = address
diff --git a/Lib/sqlite3/test/factory.py b/Lib/sqlite3/test/factory.py
index f4b8428..0e0196a 100644
--- a/Lib/sqlite3/test/factory.py
+++ b/Lib/sqlite3/test/factory.py
@@ -229,7 +229,7 @@
         self.assertEqual(row[0], "a\x00b")
 
     def CheckCustom(self):
-        # A custom factory should receive an str argument
+        # A custom factory should receive a str argument
         self.con.text_factory = lambda x: x
         row = self.con.execute("select value from test").fetchone()
         self.assertIs(type(row[0]), str)
diff --git a/Lib/sqlite3/test/regression.py b/Lib/sqlite3/test/regression.py
index 72c9277..8b0a715 100644
--- a/Lib/sqlite3/test/regression.py
+++ b/Lib/sqlite3/test/regression.py
@@ -73,7 +73,7 @@
     def CheckStatementFinalizationOnCloseDb(self):
         # pysqlite versions <= 2.3.3 only finalized statements in the statement
         # cache when closing the database. statements that were still
-        # referenced in cursors weren't closed an could provoke "
+        # referenced in cursors weren't closed and could provoke "
         # "OperationalError: Unable to close due to unfinalised statements".
         con = sqlite.connect(":memory:")
         cursors = []
diff --git a/Lib/test/test_binop.py b/Lib/test/test_binop.py
index b1ef626..c7949fd 100644
--- a/Lib/test/test_binop.py
+++ b/Lib/test/test_binop.py
@@ -56,7 +56,7 @@
     den = property(_get_den, None)
 
     def __repr__(self):
-        """Convert a Rat to an string resembling a Rat constructor call."""
+        """Convert a Rat to a string resembling a Rat constructor call."""
         return "Rat(%d, %d)" % (self.__num, self.__den)
 
     def __str__(self):
@@ -78,7 +78,7 @@
         raise ValueError, "can't convert %s to int" % repr(self)
 
     def __long__(self):
-        """Convert a Rat to an long; self.den must be 1."""
+        """Convert a Rat to a long; self.den must be 1."""
         if self.__den == 1:
             return long(self.__num)
         raise ValueError, "can't convert %s to long" % repr(self)
diff --git a/Lib/test/test_cmd.py b/Lib/test/test_cmd.py
index 2cb2c88..5101484 100644
--- a/Lib/test/test_cmd.py
+++ b/Lib/test/test_cmd.py
@@ -110,7 +110,7 @@
     5  12  19
     6  13
 
-    This is a interactive test, put some commands in the cmdqueue attribute
+    This is an interactive test, put some commands in the cmdqueue attribute
     and let it execute
     This test includes the preloop(), postloop(), default(), emptyline(),
     parseline(), do_help() functions
diff --git a/Lib/test/test_codecs.py b/Lib/test/test_codecs.py
index 57d5e06..efc40cf 100644
--- a/Lib/test/test_codecs.py
+++ b/Lib/test/test_codecs.py
@@ -47,7 +47,7 @@
         self.assertEqual(r.bytebuffer, "")
         self.assertEqual(r.charbuffer, u"")
 
-        # do the check again, this time using a incremental decoder
+        # do the check again, this time using an incremental decoder
         d = codecs.getincrementaldecoder(self.encoding)()
         result = u""
         for (c, partialresult) in zip(input.encode(self.encoding), partialresults):
diff --git a/Lib/test/test_doctest.py b/Lib/test/test_doctest.py
index 4a341ed..4b27424 100644
--- a/Lib/test/test_doctest.py
+++ b/Lib/test/test_doctest.py
@@ -951,7 +951,7 @@
         HTTPException: message
     TestResults(failed=1, attempted=2)
 
-But in Python 2 the module path is not included, an therefore a test must look
+But in Python 2 the module path is not included, and therefore a test must look
 like the following test to succeed in Python 2. But that test will fail under
 Python 3.
 
diff --git a/Lib/test/test_extcall.py b/Lib/test/test_extcall.py
index babcce9..cb2c45e 100644
--- a/Lib/test/test_extcall.py
+++ b/Lib/test/test_extcall.py
@@ -282,7 +282,7 @@
     >>> f(**x)
     1 2
 
-A obscure message:
+An obscure message:
 
     >>> def f(a, b):
     ...    pass
diff --git a/Lib/test/test_mutants.py b/Lib/test/test_mutants.py
index 69c381e..c70106d 100644
--- a/Lib/test/test_mutants.py
+++ b/Lib/test/test_mutants.py
@@ -4,7 +4,7 @@
 
 # From SF bug #422121:  Insecurities in dict comparison.
 
-# Safety of code doing comparisons has been an historical Python weak spot.
+# Safety of code doing comparisons has been a historical Python weak spot.
 # The problem is that comparison of structures written in C *naturally*
 # wants to hold on to things like the size of the container, or "the
 # biggest" containee so far, across a traversal of the container; but
diff --git a/Lib/test/test_sys.py b/Lib/test/test_sys.py
index 6336a20..95bd26e 100644
--- a/Lib/test/test_sys.py
+++ b/Lib/test/test_sys.py
@@ -463,7 +463,7 @@
         self.assertEqual(os.path.abspath(sys.executable), sys.executable)
 
         # Issue #7774: Ensure that sys.executable is an empty string if argv[0]
-        # has been set to an non existent program name and Python is unable to
+        # has been set to a non existent program name and Python is unable to
         # retrieve the real program name
         import subprocess
         # For a normal installation, it should work without 'cwd'
diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py
index 212bd1a..ac14e66 100644
--- a/Lib/test/test_threading.py
+++ b/Lib/test/test_threading.py
@@ -876,7 +876,7 @@
     eventtype = staticmethod(threading.Event)
 
 class ConditionAsRLockTests(lock_tests.RLockTests):
-    # An Condition uses an RLock by default and exports its API.
+    # Condition uses an RLock by default and exports its API.
     locktype = staticmethod(threading.Condition)
 
 class ConditionTests(lock_tests.ConditionTests):
diff --git a/Lib/xmlrpclib.py b/Lib/xmlrpclib.py
index e0e399c..3a2c0bf 100644
--- a/Lib/xmlrpclib.py
+++ b/Lib/xmlrpclib.py
@@ -358,7 +358,7 @@
 # tuple.
 #
 # @param value The time, given as an ISO 8601 string, a time
-#              tuple, or a integer time value.
+#              tuple, or an integer time value.
 
 def _strftime(value):
     if datetime:
@@ -1616,7 +1616,7 @@
         # magic method dispatcher
         return _Method(self.__request, name)
 
-    # note: to call a remote object with an non-standard name, use
+    # note: to call a remote object with a non-standard name, use
     # result getattr(server, "strange-python-name")(args)
 
     def __call__(self, attr):
diff --git a/Mac/Demo/applescript/Disk_Copy/Special_Events.py b/Mac/Demo/applescript/Disk_Copy/Special_Events.py
index a2b0910..17aefc1 100644
--- a/Mac/Demo/applescript/Disk_Copy/Special_Events.py
+++ b/Mac/Demo/applescript/Disk_Copy/Special_Events.py
@@ -20,7 +20,7 @@
     }
 
     def mount(self, _object, _attributes={}, **_arguments):
-        """mount: Mounts an Disk Copy image as a disk volume
+        """mount: Mounts a Disk Copy image as a disk volume
         Required argument: a reference to the disk image to be mounted
         Keyword argument access_mode: the access mode for mounted volume (default is "any", i.e. best possible)
         Keyword argument checksum_verification: Verify the checksum before mounting?
diff --git a/Misc/HISTORY b/Misc/HISTORY
index 60635fb..7119362 100644
--- a/Misc/HISTORY
+++ b/Misc/HISTORY
@@ -3096,7 +3096,7 @@
   would not be removed while allocating a new weakref object.  Since
   GC could be invoked at that time, however, that assumption was
   invalid.  In a truly obscure case of GC being triggered during
-  creation for a new weakref object for an referent which already
+  creation for a new weakref object for a referent which already
   has a weakref without a callback which is only referenced from
   cyclic trash, a memory error can occur.  This consistently created a
   segfault in a debug build, but provided less predictable behavior in
@@ -7825,7 +7825,7 @@
 
 - xml.dom.minidom offers a toprettyxml method. A number of DOM
   conformance issues have been resolved. In particular, Element now
-  has an hasAttributes method, and the handling of namespaces was
+  has a hasAttributes method, and the handling of namespaces was
   improved.
 
 - Ka-Ping Yee contributed two new modules: inspect.py, a module for
@@ -9315,7 +9315,7 @@
 
 Probably the most pervasive change is the addition of Unicode support.
 We've added a new fundamental datatype, the Unicode string, a new
-build-in function unicode(), an numerous C APIs to deal with Unicode
+built-in function unicode(), a numerous C APIs to deal with Unicode
 and encodings.  See the file Misc/unicode.txt for details, or
 http://starship.python.net/crew/lemburg/unicode-proposal.txt.
 
@@ -10800,7 +10800,7 @@
 - The uu module now deals better with trailing garbage generated by
 some broke uuencoders.
 
-- The telnet module now has an my_interact() method which uses threads
+- The telnet module now has a my_interact() method which uses threads
 instead of select.  The interact() method uses this by default on
 Windows (where the single-threaded version doesn't work).
 
@@ -11857,7 +11857,7 @@
 - New macros to access object members for PyFunction, PyCFunction
 objects.
 
-- New APIs PyImport_AppendInittab() an PyImport_ExtendInittab() to
+- New APIs PyImport_AppendInittab() and PyImport_ExtendInittab() to
 dynamically add one or many entries to the table of built-in modules.
 
 - New macro Py_InitModule3(name, methods, doc) which calls
@@ -16267,7 +16267,7 @@
 * repr(x) returns the same as `x`.  (Some users found it easier to
 have this as a function.)
 
-* round(x) returns the floating point number x rounded to an whole
+* round(x) returns the floating point number x rounded to a whole
 number, represented as a floating point number.  round(x, n) returns x
 rounded to n digits.
 
diff --git a/Modules/_csv.c b/Modules/_csv.c
index e78ac95..af46658 100644
--- a/Modules/_csv.c
+++ b/Modules/_csv.c
@@ -717,7 +717,7 @@
         break;
 
     case QUOTE_IN_QUOTED_FIELD:
-        /* doublequote - seen a quote in an quoted field */
+        /* doublequote - seen a quote in a quoted field */
         if (dialect->quoting != QUOTE_NONE &&
             c == dialect->quotechar) {
             /* save "" as " */
diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c
index 65c55cb..fe79b08 100644
--- a/Modules/_ctypes/_ctypes.c
+++ b/Modules/_ctypes/_ctypes.c
@@ -3899,7 +3899,7 @@
             return NULL;
         }
         /* there should be more checks? No, in Python */
-        /* First arg is an pointer to an interface instance */
+        /* First arg is a pointer to an interface instance */
         if (!this->b_ptr || *(void **)this->b_ptr == NULL) {
             PyErr_SetString(PyExc_ValueError,
                             "NULL COM pointer access");
diff --git a/Modules/cPickle.c b/Modules/cPickle.c
index cab7ca8..88f4f23 100644
--- a/Modules/cPickle.c
+++ b/Modules/cPickle.c
@@ -3444,7 +3444,7 @@
 
 /* s contains x bytes of a little-endian integer.  Return its value as a
  * C int.  Obscure:  when x is 1 or 2, this is an unsigned little-endian
- * int, but when x is 4 it's a signed one.  This is an historical source
+ * int, but when x is 4 it's a signed one.  This is a historical source
  * of x-platform bugs.
  */
 static long
diff --git a/Objects/bytearrayobject.c b/Objects/bytearrayobject.c
index edb67a4..3db3591 100644
--- a/Objects/bytearrayobject.c
+++ b/Objects/bytearrayobject.c
@@ -2883,7 +2883,7 @@
 bytearray(bytes_or_bytearray) -> mutable copy of bytes_or_bytearray.\n\
 bytearray(memory_view) -> bytearray.\n\
 \n\
-Construct an mutable bytearray object from:\n\
+Construct a mutable bytearray object from:\n\
   - an iterable yielding integers in range(256)\n\
   - a text string encoded using the specified encoding\n\
   - a bytes or a bytearray object\n\
diff --git a/Objects/stringlib/string_format.h b/Objects/stringlib/string_format.h
index 965e1ad..2bd1839 100644
--- a/Objects/stringlib/string_format.h
+++ b/Objects/stringlib/string_format.h
@@ -1310,7 +1310,7 @@
     0};
 
 /* unicode_formatter_field_name_split is used to implement
-   string.Formatter.vformat.  it takes an PEP 3101 "field name", and
+   string.Formatter.vformat.  it takes a PEP 3101 "field name", and
    returns a tuple of (first, rest): "first", the part before the
    first '.' or '['; and "rest", an iterator for the rest of the field
    name.  it's a wrapper around stringlib/string_format.h's
diff --git a/PC/_winreg.c b/PC/_winreg.c
index f757aa5..e139cce 100644
--- a/PC/_winreg.c
+++ b/PC/_winreg.c
@@ -301,7 +301,7 @@
 "  REG_EXPAND_SZ -- A null-terminated string that contains unexpanded references\n"
 "                   to environment variables (for example, %PATH%).\n"
 "  REG_LINK -- A Unicode symbolic link.\n"
-"  REG_MULTI_SZ -- An sequence of null-terminated strings, terminated by\n"
+"  REG_MULTI_SZ -- A sequence of null-terminated strings, terminated by\n"
 "                  two null characters.  Note that Python handles this\n"
 "                  termination automatically.\n"
 "  REG_NONE -- No defined value type.\n"
diff --git a/Python/thread_nt.h b/Python/thread_nt.h
index 9796a34..a161d7c 100644
--- a/Python/thread_nt.h
+++ b/Python/thread_nt.h
@@ -178,7 +178,7 @@
 }
 
 /*
- * Return the thread Id instead of an handle. The Id is said to uniquely identify the
+ * Return the thread Id instead of a handle. The Id is said to uniquely identify the
  * thread in the system
  */
 long
diff --git a/Python/thread_wince.h b/Python/thread_wince.h
index 51ddc02..b9c10da 100644
--- a/Python/thread_wince.h
+++ b/Python/thread_wince.h
@@ -42,7 +42,7 @@
 }
 
 /*
- * Return the thread Id instead of an handle. The Id is said to uniquely identify the
+ * Return the thread Id instead of a handle. The Id is said to uniquely identify the
  * thread in the system
  */
 long PyThread_get_thread_ident(void)
diff --git a/Tools/gdb/libpython.py b/Tools/gdb/libpython.py
index 390ea29..e713654 100755
--- a/Tools/gdb/libpython.py
+++ b/Tools/gdb/libpython.py
@@ -84,7 +84,7 @@
 
 
 def safety_limit(val):
-    # Given a integer value from the process being debugged, limit it to some
+    # Given an integer value from the process being debugged, limit it to some
     # safety threshold so that arbitrary breakage within said process doesn't
     # break the gdb process too much (e.g. sizes of iterations, sizes of lists)
     return min(val, 1000)
@@ -132,7 +132,7 @@
 
 class PyObjectPtr(object):
     """
-    Class wrapping a gdb.Value that's a either a (PyObject*) within the
+    Class wrapping a gdb.Value that's either a (PyObject*) within the
     inferior process, or some subclass pointer e.g. (PyStringObject*)
 
     There will be a subclass for every refined PyObject type that we care
diff --git a/Tools/msi/msi.py b/Tools/msi/msi.py
index a56e40a..3ef4a65 100644
--- a/Tools/msi/msi.py
+++ b/Tools/msi/msi.py
@@ -259,7 +259,7 @@
     # either both per-machine or per-user.
     migrate_features = 1
     # See "Upgrade Table". We remove releases with the same major and
-    # minor version. For an snapshot, we remove all earlier snapshots. For
+    # minor version. For a snapshot, we remove all earlier snapshots. For
     # a release, we remove all snapshots, and all earlier releases.
     if snapshot:
         add_data(db, "Upgrade",