Issue #16714: use 'raise' exceptions, don't 'throw'.
Patch by Serhiy Storchaka.
diff --git a/Doc/howto/cporting.rst b/Doc/howto/cporting.rst
index 6dd0765..9d8a1b0 100644
--- a/Doc/howto/cporting.rst
+++ b/Doc/howto/cporting.rst
@@ -253,7 +253,7 @@
* :c:func:`PyCapsule_GetName` always returns NULL.
- * :c:func:`PyCapsule_SetName` always throws an exception and
+ * :c:func:`PyCapsule_SetName` always raises an exception and
returns failure. (Since there's no way to store a name
in a CObject, noisy failure of :c:func:`PyCapsule_SetName`
was deemed preferable to silent failure here. If this is
diff --git a/Lib/asyncore.py b/Lib/asyncore.py
index a281e78..29099bd 100644
--- a/Lib/asyncore.py
+++ b/Lib/asyncore.py
@@ -393,7 +393,7 @@
else:
return data
except socket.error, why:
- # winsock sometimes throws ENOTCONN
+ # winsock sometimes raises ENOTCONN
if why.args[0] in _DISCONNECTED:
self.handle_close()
return ''
diff --git a/Lib/distutils/tests/test_msvc9compiler.py b/Lib/distutils/tests/test_msvc9compiler.py
index 7347072..2d94a11 100644
--- a/Lib/distutils/tests/test_msvc9compiler.py
+++ b/Lib/distutils/tests/test_msvc9compiler.py
@@ -104,7 +104,7 @@
unittest.TestCase):
def test_no_compiler(self):
- # makes sure query_vcvarsall throws
+ # makes sure query_vcvarsall raises
# a DistutilsPlatformError if the compiler
# is not found
from distutils.msvc9compiler import query_vcvarsall
diff --git a/Lib/email/feedparser.py b/Lib/email/feedparser.py
index 5ff266f..15db26d 100644
--- a/Lib/email/feedparser.py
+++ b/Lib/email/feedparser.py
@@ -13,7 +13,7 @@
data. When you have no more data to push into the parser, call .close().
This completes the parsing and returns the root message object.
-The other advantage of this parser is that it will never throw a parsing
+The other advantage of this parser is that it will never raise a parsing
exception. Instead, when it finds something unexpected, it adds a 'defect' to
the current message. Defects are just instances that live on the message
object's .defects attribute.
@@ -214,7 +214,7 @@
# supposed to see in the body of the message.
self._parse_headers(headers)
# Headers-only parsing is a backwards compatibility hack, which was
- # necessary in the older parser, which could throw errors. All
+ # necessary in the older parser, which could raise errors. All
# remaining lines in the input are thrown into the message body.
if self._headersonly:
lines = []
diff --git a/Lib/email/header.py b/Lib/email/header.py
index 2cf870f..b46d21d 100644
--- a/Lib/email/header.py
+++ b/Lib/email/header.py
@@ -103,7 +103,7 @@
dec = email.base64mime.decode(encoded)
except binascii.Error:
# Turn this into a higher level exception. BAW: Right
- # now we throw the lower level exception away but
+ # now we raise the lower level exception away but
# when/if we get exception chaining, we'll preserve it.
raise HeaderParseError
if dec is None:
diff --git a/Lib/httplib.py b/Lib/httplib.py
index 39a388e..9d11d04 100644
--- a/Lib/httplib.py
+++ b/Lib/httplib.py
@@ -1068,7 +1068,7 @@
if port == 0:
port = None
- # Note that we may pass an empty string as the host; this will throw
+ # Note that we may pass an empty string as the host; this will raise
# an error when we attempt to connect. Presumably, the client code
# will call connect before then, with a proper host.
self._setup(self._connection_class(host, port, strict))
diff --git a/Lib/io.py b/Lib/io.py
index 57e6e0d..2283276 100644
--- a/Lib/io.py
+++ b/Lib/io.py
@@ -4,7 +4,7 @@
At the top of the I/O hierarchy is the abstract base class IOBase. It
defines the basic interface to a stream. Note, however, that there is no
separation between reading and writing to streams; implementations are
-allowed to throw an IOError if they do not support a given operation.
+allowed to raise an IOError if they do not support a given operation.
Extending IOBase is RawIOBase which deals simply with the reading and
writing of raw bytes to a stream. FileIO subclasses RawIOBase to provide
diff --git a/Lib/lib-tk/Tkinter.py b/Lib/lib-tk/Tkinter.py
index 4791950..e5c2e51 100644
--- a/Lib/lib-tk/Tkinter.py
+++ b/Lib/lib-tk/Tkinter.py
@@ -155,7 +155,7 @@
pass
def _exit(code=0):
- """Internal function. Calling it will throw the exception SystemExit."""
+ """Internal function. Calling it will raise the exception SystemExit."""
try:
code = int(code)
except ValueError:
diff --git a/Lib/logging/__init__.py b/Lib/logging/__init__.py
index d279ac7..e53718d 100644
--- a/Lib/logging/__init__.py
+++ b/Lib/logging/__init__.py
@@ -1251,7 +1251,7 @@
all the handlers of this logger to handle the record.
"""
if _srcfile:
- #IronPython doesn't track Python frames, so findCaller throws an
+ #IronPython doesn't track Python frames, so findCaller raises an
#exception on some versions of IronPython. We trap it here so that
#IronPython can use logging.
try:
diff --git a/Lib/runpy.py b/Lib/runpy.py
index f635c4b..c4d7cc2 100644
--- a/Lib/runpy.py
+++ b/Lib/runpy.py
@@ -200,7 +200,7 @@
pass
else:
# The following check looks a bit odd. The trick is that
- # NullImporter throws ImportError if the supplied path is a
+ # NullImporter raises ImportError if the supplied path is a
# *valid* directory entry (and hence able to be handled
# by the standard import machinery)
try:
diff --git a/Lib/test/test_codeop.py b/Lib/test/test_codeop.py
index 99fe6f9..00cd3ce 100644
--- a/Lib/test/test_codeop.py
+++ b/Lib/test/test_codeop.py
@@ -50,7 +50,7 @@
'''succeed iff str is the start of an invalid piece of code'''
try:
compile_command(str,symbol=symbol)
- self.fail("No exception thrown for invalid code")
+ self.fail("No exception raised for invalid code")
except SyntaxError:
self.assertTrue(is_syntax)
except OverflowError:
diff --git a/Lib/test/test_docxmlrpc.py b/Lib/test/test_docxmlrpc.py
index 716333e..80d1803 100644
--- a/Lib/test/test_docxmlrpc.py
+++ b/Lib/test/test_docxmlrpc.py
@@ -100,7 +100,7 @@
self.assertEqual(response.status, 200)
self.assertEqual(response.getheader("Content-type"), "text/html")
- # Server throws an exception if we don't start to read the data
+ # Server raises an exception if we don't start to read the data
response.read()
def test_invalid_get_response(self):
diff --git a/Lib/test/test_imaplib.py b/Lib/test/test_imaplib.py
index 15b0ea0..2b2213d 100644
--- a/Lib/test/test_imaplib.py
+++ b/Lib/test/test_imaplib.py
@@ -79,7 +79,7 @@
return
line += part
except IOError:
- # ..but SSLSockets throw exceptions.
+ # ..but SSLSockets raise exceptions.
return
if line.endswith('\r\n'):
break
diff --git a/Lib/test/test_minidom.py b/Lib/test/test_minidom.py
index 060c1a5..ca0f0f7 100644
--- a/Lib/test/test_minidom.py
+++ b/Lib/test/test_minidom.py
@@ -1060,7 +1060,7 @@
'<?xml version="1.0" encoding="iso-8859-15"?><foo>\xa4</foo>',
"testEncodings - encoding EURO SIGN")
- # Verify that character decoding errors throw exceptions instead
+ # Verify that character decoding errors raise exceptions instead
# of crashing
self.assertRaises(UnicodeDecodeError, parseString,
'<fran\xe7ais>Comment \xe7a va ? Tr\xe8s bien ?</fran\xe7ais>')
diff --git a/Lib/test/test_os.py b/Lib/test/test_os.py
index 1d673f6..bdbeb01 100644
--- a/Lib/test/test_os.py
+++ b/Lib/test/test_os.py
@@ -214,33 +214,33 @@
try:
result[200]
- self.fail("No exception thrown")
+ self.fail("No exception raised")
except IndexError:
pass
# Make sure that assignment fails
try:
result.st_mode = 1
- self.fail("No exception thrown")
+ self.fail("No exception raised")
except (AttributeError, TypeError):
pass
try:
result.st_rdev = 1
- self.fail("No exception thrown")
+ self.fail("No exception raised")
except (AttributeError, TypeError):
pass
try:
result.parrot = 1
- self.fail("No exception thrown")
+ self.fail("No exception raised")
except AttributeError:
pass
# Use the stat_result constructor with a too-short tuple.
try:
result2 = os.stat_result((10,))
- self.fail("No exception thrown")
+ self.fail("No exception raised")
except TypeError:
pass
@@ -274,20 +274,20 @@
# Make sure that assignment really fails
try:
result.f_bfree = 1
- self.fail("No exception thrown")
+ self.fail("No exception raised")
except TypeError:
pass
try:
result.parrot = 1
- self.fail("No exception thrown")
+ self.fail("No exception raised")
except AttributeError:
pass
# Use the constructor with a too-short tuple.
try:
result2 = os.statvfs_result((10,))
- self.fail("No exception thrown")
+ self.fail("No exception raised")
except TypeError:
pass
diff --git a/Lib/test/test_pty.py b/Lib/test/test_pty.py
index 623f23b..bec38c4 100644
--- a/Lib/test/test_pty.py
+++ b/Lib/test/test_pty.py
@@ -152,7 +152,7 @@
# platform-dependent amount of data is written to its fd. On
# Linux 2.6, it's 4000 bytes and the child won't block, but on OS
# X even the small writes in the child above will block it. Also
- # on Linux, the read() will throw an OSError (input/output error)
+ # on Linux, the read() will raise an OSError (input/output error)
# when it tries to read past the end of the buffer but the child's
# already exited, so catch and discard those exceptions. It's not
# worth checking for EIO.
diff --git a/Lib/test/test_sax.py b/Lib/test/test_sax.py
index adb9305..c3b44f8 100644
--- a/Lib/test/test_sax.py
+++ b/Lib/test/test_sax.py
@@ -294,7 +294,7 @@
def test_5027_1(self):
# The xml prefix (as in xml:lang below) is reserved and bound by
# definition to http://www.w3.org/XML/1998/namespace. XMLGenerator had
- # a bug whereby a KeyError is thrown because this namespace is missing
+ # a bug whereby a KeyError is raised because this namespace is missing
# from a dictionary.
#
# This test demonstrates the bug by parsing a document.
@@ -320,7 +320,7 @@
def test_5027_2(self):
# The xml prefix (as in xml:lang below) is reserved and bound by
# definition to http://www.w3.org/XML/1998/namespace. XMLGenerator had
- # a bug whereby a KeyError is thrown because this namespace is missing
+ # a bug whereby a KeyError is raised because this namespace is missing
# from a dictionary.
#
# This test demonstrates the bug by direct manipulation of the
diff --git a/Lib/test/test_signal.py b/Lib/test/test_signal.py
index 8feb145..2803785 100644
--- a/Lib/test/test_signal.py
+++ b/Lib/test/test_signal.py
@@ -109,7 +109,7 @@
# This wait should be interrupted by the signal's exception.
self.wait(child)
time.sleep(1) # Give the signal time to be delivered.
- self.fail('HandlerBCalled exception not thrown')
+ self.fail('HandlerBCalled exception not raised')
except HandlerBCalled:
self.assertTrue(self.b_called)
self.assertFalse(self.a_called)
@@ -148,7 +148,7 @@
# test-running process from all the signals. It then
# communicates with that child process over a pipe and
# re-raises information about any exceptions the child
- # throws. The real work happens in self.run_test().
+ # raises. The real work happens in self.run_test().
os_done_r, os_done_w = os.pipe()
with closing(os.fdopen(os_done_r)) as done_r, \
closing(os.fdopen(os_done_w, 'w')) as done_w:
diff --git a/Lib/test/test_socketserver.py b/Lib/test/test_socketserver.py
index 3b333bc..0dbb8e2 100644
--- a/Lib/test/test_socketserver.py
+++ b/Lib/test/test_socketserver.py
@@ -58,7 +58,7 @@
def simple_subprocess(testcase):
pid = os.fork()
if pid == 0:
- # Don't throw an exception; it would be caught by the test harness.
+ # Don't raise an exception; it would be caught by the test harness.
os._exit(72)
yield None
pid2, status = os.waitpid(pid, 0)
diff --git a/Lib/test/test_sys_settrace.py b/Lib/test/test_sys_settrace.py
index 57a7839..9c7bcef 100644
--- a/Lib/test/test_sys_settrace.py
+++ b/Lib/test/test_sys_settrace.py
@@ -417,7 +417,7 @@
except ValueError:
pass
else:
- self.fail("exception not thrown!")
+ self.fail("exception not raised!")
except RuntimeError:
self.fail("recursion counter not reset")
diff --git a/Lib/test/test_time.py b/Lib/test/test_time.py
index 28917ca..4571c10 100644
--- a/Lib/test/test_time.py
+++ b/Lib/test/test_time.py
@@ -106,7 +106,7 @@
def test_strptime(self):
# Should be able to go round-trip from strftime to strptime without
- # throwing an exception.
+ # raising an exception.
tt = time.gmtime(self.t)
for directive in ('a', 'A', 'b', 'B', 'c', 'd', 'H', 'I',
'j', 'm', 'M', 'p', 'S',
diff --git a/Lib/test/test_uu.py b/Lib/test/test_uu.py
index 95c9552..31046b0 100644
--- a/Lib/test/test_uu.py
+++ b/Lib/test/test_uu.py
@@ -48,7 +48,7 @@
out = cStringIO.StringIO()
try:
uu.decode(inp, out)
- self.fail("No exception thrown")
+ self.fail("No exception raised")
except uu.Error, e:
self.assertEqual(str(e), "Truncated input file")
@@ -57,7 +57,7 @@
out = cStringIO.StringIO()
try:
uu.decode(inp, out)
- self.fail("No exception thrown")
+ self.fail("No exception raised")
except uu.Error, e:
self.assertEqual(str(e), "No valid begin line found in input file")
diff --git a/Lib/test/test_winreg.py b/Lib/test/test_winreg.py
index bdf4e14..c6268e1 100644
--- a/Lib/test/test_winreg.py
+++ b/Lib/test/test_winreg.py
@@ -234,7 +234,7 @@
def test_changing_value(self):
# Issue2810: A race condition in 2.6 and 3.1 may cause
- # EnumValue or QueryValue to throw "WindowsError: More data is
+ # EnumValue or QueryValue to raise "WindowsError: More data is
# available"
done = False
@@ -282,7 +282,7 @@
def test_dynamic_key(self):
# Issue2810, when the value is dynamically generated, these
- # throw "WindowsError: More data is available" in 2.6 and 3.1
+ # raise "WindowsError: More data is available" in 2.6 and 3.1
try:
EnumValue(HKEY_PERFORMANCE_DATA, 0)
except OSError as e:
diff --git a/Lib/test/test_zipfile.py b/Lib/test/test_zipfile.py
index 087a90a..9bd3b58 100644
--- a/Lib/test/test_zipfile.py
+++ b/Lib/test/test_zipfile.py
@@ -811,7 +811,7 @@
with zipfile.ZipFile(data, mode="w") as zipf:
zipf.writestr("foo.txt", "O, for a Muse of Fire!")
- # This is correct; calling .read on a closed ZipFile should throw
+ # This is correct; calling .read on a closed ZipFile should raise
# a RuntimeError, and so should calling .testzip. An earlier
# version of .testzip would swallow this exception (and any other)
# and report that the first file in the archive was corrupt.
diff --git a/Lib/traceback.py b/Lib/traceback.py
index 8cb9e28..da17d3a 100644
--- a/Lib/traceback.py
+++ b/Lib/traceback.py
@@ -166,7 +166,7 @@
# >>> raise string1, string2 # deprecated
#
# Clear these out first because issubtype(string1, SyntaxError)
- # would throw another exception and mask the original problem.
+ # would raise another exception and mask the original problem.
if (isinstance(etype, BaseException) or
isinstance(etype, types.InstanceType) or
etype is None or type(etype) is str):
diff --git a/Lib/unittest/case.py b/Lib/unittest/case.py
index 7017e9f..6257936 100644
--- a/Lib/unittest/case.py
+++ b/Lib/unittest/case.py
@@ -447,10 +447,10 @@
def assertRaises(self, excClass, callableObj=None, *args, **kwargs):
- """Fail unless an exception of class excClass is thrown
+ """Fail unless an exception of class excClass is raised
by callableObj when invoked with arguments args and keyword
arguments kwargs. If a different type of exception is
- thrown, it will not be caught, and the test case will be
+ raised, it will not be caught, and the test case will be
deemed to have suffered an error, exactly as for an
unexpected exception.
diff --git a/Lib/wsgiref/validate.py b/Lib/wsgiref/validate.py
index 43784f9..04a893d 100644
--- a/Lib/wsgiref/validate.py
+++ b/Lib/wsgiref/validate.py
@@ -134,9 +134,9 @@
When applied between a WSGI server and a WSGI application, this
middleware will check for WSGI compliancy on a number of levels.
This middleware does not modify the request or response in any
- way, but will throw an AssertionError if anything seems off
+ way, but will raise an AssertionError if anything seems off
(except for a failure to close the application iterator, which
- will be printed to stderr -- there's no way to throw an exception
+ will be printed to stderr -- there's no way to raise an exception
at that point).
"""
diff --git a/Lib/xml/sax/_exceptions.py b/Lib/xml/sax/_exceptions.py
index fdd614a..a9b2ba3 100644
--- a/Lib/xml/sax/_exceptions.py
+++ b/Lib/xml/sax/_exceptions.py
@@ -12,7 +12,7 @@
the application: you can subclass it to provide additional
functionality, or to add localization. Note that although you will
receive a SAXException as the argument to the handlers in the
- ErrorHandler interface, you are not actually required to throw
+ ErrorHandler interface, you are not actually required to raise
the exception; instead, you can simply read the information in
it."""
@@ -50,7 +50,7 @@
the original XML document. Note that although the application will
receive a SAXParseException as the argument to the handlers in the
ErrorHandler interface, the application is not actually required
- to throw the exception; instead, it can simply read the
+ to raise the exception; instead, it can simply read the
information in it and take a different action.
Since this exception is a subclass of SAXException, it inherits
@@ -62,7 +62,7 @@
self._locator = locator
# We need to cache this stuff at construction time.
- # If this exception is thrown, the objects through which we must
+ # If this exception is raised, the objects through which we must
# traverse to get this information may be deleted by the time
# it gets caught.
self._systemId = self._locator.getSystemId()
diff --git a/Lib/xml/sax/xmlreader.py b/Lib/xml/sax/xmlreader.py
index 46ee02b..74aa39a 100644
--- a/Lib/xml/sax/xmlreader.py
+++ b/Lib/xml/sax/xmlreader.py
@@ -68,7 +68,7 @@
SAX parsers are not required to provide localization for errors
and warnings; if they cannot support the requested locale,
- however, they must throw a SAX exception. Applications may
+ however, they must raise a SAX exception. Applications may
request a locale change in the middle of a parse."""
raise SAXNotSupportedException("Locale support not implemented")
diff --git a/Lib/xmlrpclib.py b/Lib/xmlrpclib.py
index 653c424..b93ea23 100644
--- a/Lib/xmlrpclib.py
+++ b/Lib/xmlrpclib.py
@@ -945,7 +945,7 @@
class MultiCallIterator:
"""Iterates over the results of a multicall. Exceptions are
- thrown in response to xmlrpc faults."""
+ raised in response to xmlrpc faults."""
def __init__(self, results):
self.results = results
diff --git a/Modules/_io/_iomodule.c b/Modules/_io/_iomodule.c
index e356ea5..d73dff2 100644
--- a/Modules/_io/_iomodule.c
+++ b/Modules/_io/_iomodule.c
@@ -59,7 +59,7 @@
"At the top of the I/O hierarchy is the abstract base class IOBase. It\n"
"defines the basic interface to a stream. Note, however, that there is no\n"
"separation between reading and writing to streams; implementations are\n"
-"allowed to throw an IOError if they do not support a given operation.\n"
+"allowed to raise an IOError if they do not support a given operation.\n"
"\n"
"Extending IOBase is RawIOBase which deals simply with the reading and\n"
"writing of raw bytes to a stream. FileIO subclasses RawIOBase to provide\n"
diff --git a/Modules/parsermodule.c b/Modules/parsermodule.c
index 8e581c2..eb2d600 100644
--- a/Modules/parsermodule.c
+++ b/Modules/parsermodule.c
@@ -698,7 +698,7 @@
err_string("parse tree does not use a valid start symbol");
}
}
- /* Make sure we throw an exception on all errors. We should never
+ /* Make sure we raise an exception on all errors. We should never
* get this, but we'd do well to be sure something is done.
*/
if (st == NULL && !PyErr_Occurred())
@@ -813,7 +813,7 @@
else if (!ISNONTERMINAL(type)) {
/*
* It has to be one or the other; this is an error.
- * Throw an exception.
+ * Raise an exception.
*/
PyObject *err = Py_BuildValue("os", elem, "unknown node type.");
PyErr_SetObject(parser_error, err);
@@ -863,7 +863,7 @@
if (ISTERMINAL(num)) {
/*
* The tuple is simple, but it doesn't start with a start symbol.
- * Throw an exception now and be done with it.
+ * Raise an exception now and be done with it.
*/
tuple = Py_BuildValue("os", tuple,
"Illegal syntax-tree; cannot start with terminal symbol.");
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index ea810ec..21a6739 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -349,7 +349,7 @@
#if defined _MSC_VER && _MSC_VER >= 1400
/* Microsoft CRT in VS2005 and higher will verify that a filehandle is
- * valid and throw an assertion if it isn't.
+ * valid and raise an assertion if it isn't.
* Normally, an invalid fd is likely to be a C program error and therefore
* an assertion can be useful, but it does contradict the POSIX standard
* which for write(2) states:
diff --git a/Tools/scripts/serve.py b/Tools/scripts/serve.py
index 50061d5..399da1a 100755
--- a/Tools/scripts/serve.py
+++ b/Tools/scripts/serve.py
@@ -2,7 +2,7 @@
'''
Small wsgiref based web server. Takes a path to serve from and an
optional port number (defaults to 8000), then tries to serve files.
-Mime types are guessed from the file names, 404 errors are thrown
+Mime types are guessed from the file names, 404 errors are raised
if the file is not found. Used for the make serve target in Doc.
'''
import sys