Skip to content

Commit

Permalink
bpo-5001, bpo-31169: Fix two uninformative asserts in multiprocessing…
Browse files Browse the repository at this point in the history
…/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)
  • Loading branch information
drallensmith authored and pitrou committed Aug 12, 2017
1 parent e664d7f commit 48d9823
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 7 deletions.
17 changes: 10 additions & 7 deletions Lib/multiprocessing/managers.py
Expand Up @@ -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):
Expand Down
1 change: 1 addition & 0 deletions Misc/ACKS
Expand Up @@ -1465,6 +1465,7 @@ Ville Skyttä
Michael Sloan
Nick Sloan
Václav Šmilauer
Allen W. Smith
Christopher Smith
Eric V. Smith
Gregory P. Smith
Expand Down
@@ -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).

0 comments on commit 48d9823

Please sign in to comment.