mirror of
https://github.com/pytorch/pytorch.git
synced 2025-10-20 12:54:11 +08:00
Reraise worker errors as runtime errors in more cases when the original exception can't be constructed (#140911)
related to https://github.com/pytorch/pytorch/issues/34130 when pytorch attempts to re-raise an exception from a worker process (e.g. multiprocessing dataloader), if it can't reconstruct the original exception message due to a type error, it instead raises it as a runtime error. However, if it can't reconstruct the exception for some other reason, it throws an error with a stacktrace pointing to the `ExceptionWrapper` code rather than the original underlying issue. One case in which I run into this is with boto3's [HTTPClientError](66dc1f8d52/botocore/exceptions.py (L94)
)s. They must be constructed with a keyword argument `error`, but if `error` isn't passed, a `KeyError` is thrown instead of a `TypeError`, due to the particular way it is implemented: * [HTTPClientError](66dc1f8d52/botocore/exceptions.py (L94)
)'s constructor excepts variable keyword arguments it passes to `super` (BotoCoreError) * [it also defines a field `fmt` with `error`](66dc1f8d52/botocore/exceptions.py (L95)
) * BotoCoreError [expects to be able to format that string with the kwargs](66dc1f8d52/botocore/exceptions.py (L41)
) So in this case, if a HTTPClientError occurs on a worker process, you simply get a `KeyError: error` with a stacktrace pointing to [this line](3e2f276a14/torch/_utils.py (L710)
) which is unhelpful. Instead, I propose to reraise the error as a `RuntimeError` unconditionally. Pull Request resolved: https://github.com/pytorch/pytorch/pull/140911 Approved by: https://github.com/vmoens
This commit is contained in:
committed by
PyTorch MergeBot
parent
cdc03f99b7
commit
33dee721ae
@ -726,9 +726,9 @@ class ExceptionWrapper:
|
||||
raise self.exc_type(message=msg)
|
||||
try:
|
||||
exception = self.exc_type(msg)
|
||||
except TypeError:
|
||||
# If the exception takes multiple arguments, don't try to
|
||||
# instantiate since we don't know how to
|
||||
except Exception:
|
||||
# If the exception takes multiple arguments or otherwise can't
|
||||
# be constructed, don't try to instantiate since we don't know how to
|
||||
raise RuntimeError(msg) from None
|
||||
raise exception
|
||||
|
||||
|
Reference in New Issue
Block a user