Issue #25523: Correct "a" article to "an" article

This changes the main documentation, doc strings, source code comments, and a
couple error messages in the test suite. In some cases the word was removed
or edited some other way to fix the grammar.
diff --git a/Doc/c-api/buffer.rst b/Doc/c-api/buffer.rst
index d099ace..7361099 100644
--- a/Doc/c-api/buffer.rst
+++ b/Doc/c-api/buffer.rst
@@ -40,7 +40,7 @@
 
 Simple objects such as :class:`bytes` and :class:`bytearray` expose their
 underlying buffer in byte-oriented form.  Other forms are possible; for example,
-the elements exposed by a :class:`array.array` can be multi-byte values.
+the elements exposed by an :class:`array.array` can be multi-byte values.
 
 An example consumer of the buffer interface is the :meth:`~io.BufferedIOBase.write`
 method of file objects: any object that can export a series of bytes through
diff --git a/Doc/faq/programming.rst b/Doc/faq/programming.rst
index 67a9c56..295445e 100644
--- a/Doc/faq/programming.rst
+++ b/Doc/faq/programming.rst
@@ -849,7 +849,7 @@
 You can't, because strings are immutable.  In most situations, you should
 simply construct a new string from the various parts you want to assemble
 it from.  However, if you need an object with the ability to modify in-place
-unicode data, try using a :class:`io.StringIO` object or the :mod:`array`
+unicode data, try using an :class:`io.StringIO` object or the :mod:`array`
 module::
 
    >>> import io
diff --git a/Doc/library/chunk.rst b/Doc/library/chunk.rst
index 50b6979..a90e9f8 100644
--- a/Doc/library/chunk.rst
+++ b/Doc/library/chunk.rst
@@ -47,7 +47,7 @@
 the :class:`Chunk` class defined here is to instantiate an instance at the start
 of each chunk and read from the instance until it reaches the end, after which a
 new instance can be instantiated. At the end of the file, creating a new
-instance will fail with a :exc:`EOFError` exception.
+instance will fail with an :exc:`EOFError` exception.
 
 
 .. class:: Chunk(file, align=True, bigendian=True, inclheader=False)
diff --git a/Doc/library/concurrent.futures.rst b/Doc/library/concurrent.futures.rst
index cc8b335..e63e741 100644
--- a/Doc/library/concurrent.futures.rst
+++ b/Doc/library/concurrent.futures.rst
@@ -81,7 +81,7 @@
 ThreadPoolExecutor
 ------------------
 
-:class:`ThreadPoolExecutor` is a :class:`Executor` subclass that uses a pool of
+:class:`ThreadPoolExecutor` is an :class:`Executor` subclass that uses a pool of
 threads to execute calls asynchronously.
 
 Deadlocks can occur when the callable associated with a :class:`Future` waits on
@@ -285,7 +285,7 @@
 
        Added callables are called in the order that they were added and are
        always called in a thread belonging to the process that added them.  If
-       the callable raises a :exc:`Exception` subclass, it will be logged and
+       the callable raises an :exc:`Exception` subclass, it will be logged and
        ignored.  If the callable raises a :exc:`BaseException` subclass, the
        behavior is undefined.
 
diff --git a/Doc/library/ctypes.rst b/Doc/library/ctypes.rst
index 588ac7c..630d279 100644
--- a/Doc/library/ctypes.rst
+++ b/Doc/library/ctypes.rst
@@ -39,7 +39,7 @@
 convention, while *windll* libraries call functions using the ``stdcall``
 calling convention. *oledll* also uses the ``stdcall`` calling convention, and
 assumes the functions return a Windows :c:type:`HRESULT` error code. The error
-code is used to automatically raise a :class:`OSError` exception when the
+code is used to automatically raise an :class:`OSError` exception when the
 function call fails.
 
 .. versionchanged:: 3.3
diff --git a/Doc/library/difflib.rst b/Doc/library/difflib.rst
index 6092582..cead818 100644
--- a/Doc/library/difflib.rst
+++ b/Doc/library/difflib.rst
@@ -269,7 +269,7 @@
    generating the delta lines) in unified diff format.
 
    Unified diffs are a compact way of showing just the lines that have changed plus
-   a few lines of context.  The changes are shown in a inline style (instead of
+   a few lines of context.  The changes are shown in an inline style (instead of
    separate before/after blocks).  The number of context lines is set by *n* which
    defaults to three.
 
diff --git a/Doc/library/fcntl.rst b/Doc/library/fcntl.rst
index 8e932fb..a517d6e 100644
--- a/Doc/library/fcntl.rst
+++ b/Doc/library/fcntl.rst
@@ -16,13 +16,13 @@
 
 All functions in this module take a file descriptor *fd* as their first
 argument.  This can be an integer file descriptor, such as returned by
-``sys.stdin.fileno()``, or a :class:`io.IOBase` object, such as ``sys.stdin``
+``sys.stdin.fileno()``, or an :class:`io.IOBase` object, such as ``sys.stdin``
 itself, which provides a :meth:`~io.IOBase.fileno` that returns a genuine file
 descriptor.
 
 .. versionchanged:: 3.3
-   Operations in this module used to raise a :exc:`IOError` where they now
-   raise a :exc:`OSError`.
+   Operations in this module used to raise an :exc:`IOError` where they now
+   raise an :exc:`OSError`.
 
 
 The module defines the following functions:
diff --git a/Doc/library/ftplib.rst b/Doc/library/ftplib.rst
index 3b9f50c..2521f49 100644
--- a/Doc/library/ftplib.rst
+++ b/Doc/library/ftplib.rst
@@ -287,9 +287,9 @@
 
 .. method:: FTP.transfercmd(cmd, rest=None)
 
-   Initiate a transfer over the data connection.  If the transfer is active, send a
+   Initiate a transfer over the data connection.  If the transfer is active, send an
    ``EPRT`` or  ``PORT`` command and the transfer command specified by *cmd*, and
-   accept the connection.  If the server is passive, send a ``EPSV`` or ``PASV``
+   accept the connection.  If the server is passive, send an ``EPSV`` or ``PASV``
    command, connect to it, and start the transfer command.  Either way, return the
    socket for the connection.
 
diff --git a/Doc/library/functions.rst b/Doc/library/functions.rst
index 97c9f8d..1261062 100644
--- a/Doc/library/functions.rst
+++ b/Doc/library/functions.rst
@@ -1029,9 +1029,9 @@
    :class:`io.TextIOBase` (specifically :class:`io.TextIOWrapper`).  When used
    to open a file in a binary mode with buffering, the returned class is a
    subclass of :class:`io.BufferedIOBase`.  The exact class varies: in read
-   binary mode, it returns a :class:`io.BufferedReader`; in write binary and
-   append binary modes, it returns a :class:`io.BufferedWriter`, and in
-   read/write mode, it returns a :class:`io.BufferedRandom`.  When buffering is
+   binary mode, it returns an :class:`io.BufferedReader`; in write binary and
+   append binary modes, it returns an :class:`io.BufferedWriter`, and in
+   read/write mode, it returns an :class:`io.BufferedRandom`.  When buffering is
    disabled, the raw stream, a subclass of :class:`io.RawIOBase`,
    :class:`io.FileIO`, is returned.
 
diff --git a/Doc/library/gzip.rst b/Doc/library/gzip.rst
index 78536fa..ce02077 100644
--- a/Doc/library/gzip.rst
+++ b/Doc/library/gzip.rst
@@ -100,7 +100,7 @@
 
    Calling a :class:`GzipFile` object's :meth:`close` method does not close
    *fileobj*, since you might wish to append more material after the compressed
-   data.  This also allows you to pass a :class:`io.BytesIO` object opened for
+   data.  This also allows you to pass an :class:`io.BytesIO` object opened for
    writing as *fileobj*, and retrieve the resulting memory buffer using the
    :class:`io.BytesIO` object's :meth:`~io.BytesIO.getvalue` method.
 
diff --git a/Doc/library/http.cookiejar.rst b/Doc/library/http.cookiejar.rst
index 30648ac..ca68aac 100644
--- a/Doc/library/http.cookiejar.rst
+++ b/Doc/library/http.cookiejar.rst
@@ -176,7 +176,7 @@
 
    The *response* object (usually the result of a call to
    :meth:`urllib.request.urlopen`, or similar) should support an :meth:`info`
-   method, which returns a :class:`email.message.Message` instance.
+   method, which returns an :class:`email.message.Message` instance.
 
    The *request* object (usually a :class:`urllib.request.Request` instance)
    must support the methods :meth:`get_full_url`, :meth:`get_host`,
diff --git a/Doc/library/http.server.rst b/Doc/library/http.server.rst
index 1c3e202..0bde35b 100644
--- a/Doc/library/http.server.rst
+++ b/Doc/library/http.server.rst
@@ -176,7 +176,7 @@
 
    .. method:: handle_expect_100()
 
-      When a HTTP/1.1 compliant server receives a ``Expect: 100-continue``
+      When a HTTP/1.1 compliant server receives an ``Expect: 100-continue``
       request header it responds back with a ``100 Continue`` followed by ``200
       OK`` headers.
       This method can be overridden to raise an error if the server does not
@@ -210,7 +210,7 @@
       are picked up from the :meth:`version_string` and
       :meth:`date_time_string` methods, respectively. If the server does not
       intend to send any other headers using the :meth:`send_header` method,
-      then :meth:`send_response` should be followed by a :meth:`end_headers`
+      then :meth:`send_response` should be followed by an :meth:`end_headers`
       call.
 
       .. versionchanged:: 3.3
diff --git a/Doc/library/mailbox.rst b/Doc/library/mailbox.rst
index 6334bd6..d29902d 100644
--- a/Doc/library/mailbox.rst
+++ b/Doc/library/mailbox.rst
@@ -674,7 +674,7 @@
 
       In Babyl mailboxes, the headers of a message are not stored contiguously
       with the body of the message. To generate a file-like representation, the
-      headers and body are copied together into a :class:`io.BytesIO` instance,
+      headers and body are copied together into an :class:`io.BytesIO` instance,
       which has an API identical to that of a
       file. As a result, the file-like object is truly independent of the
       underlying mailbox but does not save memory compared to a string
diff --git a/Doc/library/multiprocessing.rst b/Doc/library/multiprocessing.rst
index 3ffb7f9..f7dc11b 100644
--- a/Doc/library/multiprocessing.rst
+++ b/Doc/library/multiprocessing.rst
@@ -1041,7 +1041,7 @@
       readable.
 
       .. versionchanged:: 3.3
-         This function used to raise a :exc:`IOError`, which is now an
+         This function used to raise :exc:`IOError`, which is now an
          alias of :exc:`OSError`.
 
 
diff --git a/Doc/library/nntplib.rst b/Doc/library/nntplib.rst
index 3943f2c..4797965 100644
--- a/Doc/library/nntplib.rst
+++ b/Doc/library/nntplib.rst
@@ -341,7 +341,7 @@
 
 .. method:: NNTP.over(message_spec, *, file=None)
 
-   Send a ``OVER`` command, or a ``XOVER`` command on legacy servers.
+   Send an ``OVER`` command, or an ``XOVER`` command on legacy servers.
    *message_spec* can be either a string representing a message id, or
    a ``(first, last)`` tuple of numbers indicating a range of articles in
    the current group, or a ``(first, None)`` tuple indicating a range of
diff --git a/Doc/library/optparse.rst b/Doc/library/optparse.rst
index 72145aa..160c29d 100644
--- a/Doc/library/optparse.rst
+++ b/Doc/library/optparse.rst
@@ -1324,7 +1324,7 @@
    the list of arguments to process (default: ``sys.argv[1:]``)
 
 ``values``
-   a :class:`optparse.Values` object to store option arguments in (default: a
+   an :class:`optparse.Values` object to store option arguments in (default: a
    new instance of :class:`Values`) -- if you give an existing object, the
    option defaults will not be initialized on it
 
diff --git a/Doc/library/os.path.rst b/Doc/library/os.path.rst
index 92631b2..33ef564 100644
--- a/Doc/library/os.path.rst
+++ b/Doc/library/os.path.rst
@@ -263,7 +263,7 @@
 
    Return ``True`` if both pathname arguments refer to the same file or directory.
    This is determined by the device number and i-node number and raises an
-   exception if a :func:`os.stat` call on either pathname fails.
+   exception if an :func:`os.stat` call on either pathname fails.
 
    Availability: Unix, Windows.
 
diff --git a/Doc/library/pickle.rst b/Doc/library/pickle.rst
index 25a9240..08618fa 100644
--- a/Doc/library/pickle.rst
+++ b/Doc/library/pickle.rst
@@ -221,7 +221,7 @@
    The argument *file* must have two methods, a read() method that takes an
    integer argument, and a readline() method that requires no arguments.  Both
    methods should return bytes.  Thus *file* can be an on-disk file opened for
-   binary reading, a :class:`io.BytesIO` object, or any other custom object
+   binary reading, an :class:`io.BytesIO` object, or any other custom object
    that meets this interface.
 
    Optional keyword arguments are *fix_imports*, *encoding* and *errors*,
@@ -357,7 +357,7 @@
    The argument *file* must have two methods, a read() method that takes an
    integer argument, and a readline() method that requires no arguments.  Both
    methods should return bytes.  Thus *file* can be an on-disk file object
-   opened for binary reading, a :class:`io.BytesIO` object, or any other
+   opened for binary reading, an :class:`io.BytesIO` object, or any other
    custom object that meets this interface.
 
    Optional keyword arguments are *fix_imports*, *encoding* and *errors*,
diff --git a/Doc/library/pyexpat.rst b/Doc/library/pyexpat.rst
index 78aa99c..620ffb1 100644
--- a/Doc/library/pyexpat.rst
+++ b/Doc/library/pyexpat.rst
@@ -763,7 +763,7 @@
 
 .. data:: XML_ERROR_UNDEFINED_ENTITY
 
-   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/shutil.rst b/Doc/library/shutil.rst
index 2606fed..7566521 100644
--- a/Doc/library/shutil.rst
+++ b/Doc/library/shutil.rst
@@ -206,8 +206,8 @@
    and metadata of the linked files are copied to the new tree.
 
    When *symlinks* is false, if the file pointed by the symlink doesn't
-   exist, a exception will be added in the list of errors raised in
-   a :exc:`Error` exception at the end of the copy process.
+   exist, an exception will be added in the list of errors raised in
+   an :exc:`Error` exception at the end of the copy process.
    You can set the optional *ignore_dangling_symlinks* flag to true if you
    want to silence this exception. Notice that this option has no effect
    on platforms that don't support :func:`os.symlink`.
diff --git a/Doc/library/smtplib.rst b/Doc/library/smtplib.rst
index 8e1bfb5..b87ad5f 100644
--- a/Doc/library/smtplib.rst
+++ b/Doc/library/smtplib.rst
@@ -22,7 +22,7 @@
 
 .. class:: SMTP(host='', port=0, local_hostname=None[, timeout], source_address=None)
 
-   A :class:`SMTP` instance encapsulates an SMTP connection.  It has methods
+   An :class:`SMTP` instance encapsulates an SMTP connection.  It has methods
    that support a full repertoire of SMTP and ESMTP operations. If the optional
    host and port parameters are given, the SMTP :meth:`connect` method is
    called with those parameters during initialization.  If specified,
@@ -65,7 +65,7 @@
                     certfile=None [, timeout], context=None, \
                     source_address=None)
 
-   A :class:`SMTP_SSL` instance behaves exactly the same as instances of
+   An :class:`SMTP_SSL` instance behaves exactly the same as instances of
    :class:`SMTP`. :class:`SMTP_SSL` should be used for situations where SSL is
    required from the beginning of the connection and using :meth:`starttls` is
    not appropriate. If *host* is not specified, the local host is used. If
diff --git a/Doc/library/socket.rst b/Doc/library/socket.rst
index 638a77e..80d5811 100644
--- a/Doc/library/socket.rst
+++ b/Doc/library/socket.rst
@@ -693,7 +693,7 @@
 
    Supported values for *address_family* are currently :const:`AF_INET` and
    :const:`AF_INET6`. If the string *packed_ip* is not the correct length for the
-   specified address family, :exc:`ValueError` will be raised.  A
+   specified address family, :exc:`ValueError` will be raised.
    :exc:`OSError` is raised for errors from the call to :func:`inet_ntop`.
 
    Availability: Unix (maybe not all platforms), Windows.
@@ -969,7 +969,7 @@
    interpreted the same way as by the built-in :func:`open` function.
 
    The socket must be in blocking mode; it can have a timeout, but the file
-   object's internal buffer may end up in a inconsistent state if a timeout
+   object's internal buffer may end up in an inconsistent state if a timeout
    occurs.
 
    Closing the file object returned by :meth:`makefile` won't close the
diff --git a/Doc/library/sqlite3.rst b/Doc/library/sqlite3.rst
index 6097e7a..715321a 100644
--- a/Doc/library/sqlite3.rst
+++ b/Doc/library/sqlite3.rst
@@ -615,7 +615,7 @@
    .. attribute:: lastrowid
 
       This read-only attribute provides the rowid of the last modified row. It is
-      only set if you issued a ``INSERT`` statement using the :meth:`execute`
+      only set if you issued an ``INSERT`` statement using the :meth:`execute`
       method. For operations other than ``INSERT`` or when :meth:`executemany` is
       called, :attr:`lastrowid` is set to :const:`None`.
 
diff --git a/Doc/library/stdtypes.rst b/Doc/library/stdtypes.rst
index ce3c532..fdb5e9e 100644
--- a/Doc/library/stdtypes.rst
+++ b/Doc/library/stdtypes.rst
@@ -951,7 +951,7 @@
    runtime cost, you must switch to one of the alternatives below:
 
    * if concatenating :class:`str` objects, you can build a list and use
-     :meth:`str.join` at the end or else write to a :class:`io.StringIO`
+     :meth:`str.join` at the end or else write to an :class:`io.StringIO`
      instance and retrieve its value when complete
 
    * if concatenating :class:`bytes` objects, you can similarly use
diff --git a/Doc/library/sunau.rst b/Doc/library/sunau.rst
index a94ae08..bd37ee2 100644
--- a/Doc/library/sunau.rst
+++ b/Doc/library/sunau.rst
@@ -54,8 +54,8 @@
 
    Note that it does not allow read/write files.
 
-   A *mode* of ``'r'`` returns a :class:`AU_read` object, while a *mode* of ``'w'``
-   or ``'wb'`` returns a :class:`AU_write` object.
+   A *mode* of ``'r'`` returns an :class:`AU_read` object, while a *mode* of ``'w'``
+   or ``'wb'`` returns an :class:`AU_write` object.
 
 
 .. function:: openfp(file, mode)
diff --git a/Doc/library/tempfile.rst b/Doc/library/tempfile.rst
index 44d025d..1efb5e6 100644
--- a/Doc/library/tempfile.rst
+++ b/Doc/library/tempfile.rst
@@ -82,7 +82,7 @@
    causes the file to roll over to an on-disk file regardless of its size.
 
    The returned object is a file-like object whose :attr:`_file` attribute
-   is either a :class:`io.BytesIO` or :class:`io.StringIO` object (depending on
+   is either an :class:`io.BytesIO` or :class:`io.StringIO` object (depending on
    whether binary or text *mode* was specified) or a true file
    object, depending on whether :func:`rollover` has been called.  This
    file-like object can be used in a :keyword:`with` statement, just like
diff --git a/Doc/library/unittest.mock.rst b/Doc/library/unittest.mock.rst
index 48eefe9..d7d735c 100644
--- a/Doc/library/unittest.mock.rst
+++ b/Doc/library/unittest.mock.rst
@@ -1105,7 +1105,7 @@
       ...
     TypeError: 'NonCallableMock' object is not callable
 
-Another use case might be to replace an object with a :class:`io.StringIO` instance:
+Another use case might be to replace an object with an :class:`io.StringIO` instance:
 
     >>> from io import StringIO
     >>> def foo():
diff --git a/Doc/library/xml.dom.pulldom.rst b/Doc/library/xml.dom.pulldom.rst
index a9c9f67..a3b8bc1 100644
--- a/Doc/library/xml.dom.pulldom.rst
+++ b/Doc/library/xml.dom.pulldom.rst
@@ -47,7 +47,7 @@
 * :data:`PROCESSING_INSTRUCTION`
 * :data:`IGNORABLE_WHITESPACE`
 
-``node`` is a object of type :class:`xml.dom.minidom.Document`,
+``node`` is an object of type :class:`xml.dom.minidom.Document`,
 :class:`xml.dom.minidom.Element` or :class:`xml.dom.minidom.Text`.
 
 Since the document is treated as a "flat" stream of events, the document "tree"
diff --git a/Doc/tutorial/errors.rst b/Doc/tutorial/errors.rst
index d048ae9..351ee52 100644
--- a/Doc/tutorial/errors.rst
+++ b/Doc/tutorial/errors.rst
@@ -336,7 +336,7 @@
 A *finally clause* is always executed before leaving the :keyword:`try`
 statement, whether an exception has occurred or not. When an exception has
 occurred in the :keyword:`try` clause and has not been handled by an
-:keyword:`except` clause (or it has occurred in a :keyword:`except` or
+:keyword:`except` clause (or it has occurred in an :keyword:`except` or
 :keyword:`else` clause), it is re-raised after the :keyword:`finally` clause has
 been executed.  The :keyword:`finally` clause is also executed "on the way out"
 when any other clause of the :keyword:`try` statement is left via a
diff --git a/Doc/tutorial/introduction.rst b/Doc/tutorial/introduction.rst
index 531d06b..c5c1343 100644
--- a/Doc/tutorial/introduction.rst
+++ b/Doc/tutorial/introduction.rst
@@ -303,7 +303,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.1.rst b/Doc/whatsnew/2.1.rst
index ff15662..6de5bf5 100644
--- a/Doc/whatsnew/2.1.rst
+++ b/Doc/whatsnew/2.1.rst
@@ -555,7 +555,7 @@
 and experiment with them.  With the result experience, perhaps it'll be possible
 to design a really good catalog and then build support for it into Python 2.2.
 For example, the Distutils :command:`sdist` and :command:`bdist_\*` commands
-could support a ``upload`` option that would automatically upload your
+could support an ``upload`` option that would automatically upload your
 package to a catalog server.
 
 You can start creating packages containing :file:`PKG-INFO` even if you're not
diff --git a/Doc/whatsnew/2.3.rst b/Doc/whatsnew/2.3.rst
index f478c09..9d99074 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/Doc/whatsnew/3.1.rst b/Doc/whatsnew/3.1.rst
index f272da4..c1a1687 100644
--- a/Doc/whatsnew/3.1.rst
+++ b/Doc/whatsnew/3.1.rst
@@ -336,7 +336,7 @@
   (Contributed by David Laban; :issue:`4739`.)
 
 * The :mod:`unittest` module now supports skipping individual tests or classes
-  of tests. And it supports marking a test as a expected failure, a test that
+  of tests. And it supports marking a test as an expected failure, a test that
   is known to be broken, but shouldn't be counted as a failure on a
   TestResult::
 
diff --git a/Doc/whatsnew/3.2.rst b/Doc/whatsnew/3.2.rst
index 5171f3c..5822504 100644
--- a/Doc/whatsnew/3.2.rst
+++ b/Doc/whatsnew/3.2.rst
@@ -788,7 +788,7 @@
   :issue:`8814`.)
 
 * To help write classes with rich comparison methods, a new decorator
-  :func:`functools.total_ordering` will use a existing equality and inequality
+  :func:`functools.total_ordering` will use existing equality and inequality
   methods to fill in the remaining methods.
 
   For example, supplying *__eq__* and *__lt__* will enable
@@ -1399,7 +1399,7 @@
 
 Also, the :class:`zipfile.ZipExtFile` class was reworked internally to represent
 files stored inside an archive.  The new implementation is significantly faster
-and can be wrapped in a :class:`io.BufferedReader` object for more speedups.  It
+and can be wrapped in an :class:`io.BufferedReader` object for more speedups.  It
 also solves an issue where interleaved calls to *read* and *readline* gave the
 wrong results.
 
diff --git a/Doc/whatsnew/3.3.rst b/Doc/whatsnew/3.3.rst
index 1d4ce72..48379d9 100644
--- a/Doc/whatsnew/3.3.rst
+++ b/Doc/whatsnew/3.3.rst
@@ -1421,7 +1421,7 @@
 
 :class:`http.client.HTTPResponse` now has a
 :meth:`~http.client.HTTPResponse.readinto` method, which means it can be used
-as a :class:`io.RawIOBase` class.  (Contributed by John Kuhn in
+as an :class:`io.RawIOBase` class.  (Contributed by John Kuhn in
 :issue:`13464`.)