[Python-checkins] bpo-5001, bpo-31169: Fix two uninformative asserts in multiprocessing/managers.py (#3078)
Antoine Pitrou
webhook-mailer at python.org
Sat Aug 12 11:37:12 EDT 2017
https://github.com/python/cpython/commit/48d9823a0ebde4dfab8bc154bb6df462fb2ee403
commit: 48d9823a0ebde4dfab8bc154bb6df462fb2ee403
branch: master
author: Allen W. Smith, Ph.D <drallensmith at users.noreply.github.com>
committer: Antoine Pitrou <pitrou at free.fr>
date: 2017-08-12T17:37:09+02:00
summary:
bpo-5001, bpo-31169: Fix two uninformative asserts in multiprocessing/managers.py (#3078)
* Make error message more informative
Replace assertions in error-reporting code with more-informative version that doesn't cause confusion over where and what the error is.
* Additional clarification + get travis to check
* Change from SystemError to TypeError
As suggested in PR comment by @pitrou, changing from SystemError; TypeError appears appropriate.
* NEWS file installation; ACKS addition (will do my best to justify it by additional work)
files:
A Misc/NEWS.d/next/Library/2017-08-12-09-25-55.bpo-5001.huQi2Y.rst
M Lib/multiprocessing/managers.py
M Misc/ACKS
diff --git a/Lib/multiprocessing/managers.py b/Lib/multiprocessing/managers.py
index cae1c10734b..c6722771b05 100644
--- a/Lib/multiprocessing/managers.py
+++ b/Lib/multiprocessing/managers.py
@@ -84,14 +84,17 @@ def dispatch(c, id, methodname, args=(), kwds={}):
def convert_to_error(kind, result):
if kind == '#ERROR':
return result
- elif kind == '#TRACEBACK':
- assert type(result) is str
- return RemoteError(result)
- elif kind == '#UNSERIALIZABLE':
- assert type(result) is str
- return RemoteError('Unserializable message: %s\n' % result)
+ elif kind in ('#TRACEBACK', '#UNSERIALIZABLE'):
+ if not isinstance(result, str):
+ raise TypeError(
+ "Result {0!r} (kind '{1}') type is {2}, not str".format(
+ result, kind, type(result)))
+ if kind == '#UNSERIALIZABLE':
+ return RemoteError('Unserializable message: %s\n' % result)
+ else:
+ return RemoteError(result)
else:
- return ValueError('Unrecognized message type')
+ return ValueError('Unrecognized message type {!r}'.format(kind))
class RemoteError(Exception):
def __str__(self):
diff --git a/Misc/ACKS b/Misc/ACKS
index d6088b3f5d9..6fc41b36b59 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -1465,6 +1465,7 @@ Ville Skyttä
Michael Sloan
Nick Sloan
Václav Šmilauer
+Allen W. Smith
Christopher Smith
Eric V. Smith
Gregory P. Smith
diff --git a/Misc/NEWS.d/next/Library/2017-08-12-09-25-55.bpo-5001.huQi2Y.rst b/Misc/NEWS.d/next/Library/2017-08-12-09-25-55.bpo-5001.huQi2Y.rst
new file mode 100644
index 00000000000..f157d49a816
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2017-08-12-09-25-55.bpo-5001.huQi2Y.rst
@@ -0,0 +1,9 @@
+There are a number of uninformative asserts in the `multiprocessing` module,
+as noted in issue 5001. This change fixes two of the most potentially
+problematic ones, since they are in error-reporting code, in the
+`multiprocessing.managers.convert_to_error` function. (It also makes more
+informative a ValueError message.) The only potentially problematic change
+is that the AssertionError is now a TypeError; however, this should also
+help distinguish it from an AssertionError being *reported* by the
+function/its caller (such as in issue 31169). - Patch by Allen W. Smith
+(drallensmith on github).
More information about the Python-checkins
mailing list