From ebc1b23fa38d54e9805aa4356867369f064c7031 Mon Sep 17 00:00:00 2001 From: Akihiro Nitta Date: Fri, 2 Oct 2020 04:45:44 +0900 Subject: [PATCH] Use `raise .. from ..` to explicitly chain exceptions (#3750) * Fix exception chaining * names * Change exception names for consistency Co-authored-by: Nicki Skafte * Change exception names for consistency Co-authored-by: Nicki Skafte Co-authored-by: Jirka Borovec Co-authored-by: Nicki Skafte --- pytorch_lightning/accelerators/ddp2_backend.py | 4 ++-- pytorch_lightning/trainer/logging.py | 4 ++-- pytorch_lightning/utilities/parsing.py | 4 ++-- tests/base/models.py | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/pytorch_lightning/accelerators/ddp2_backend.py b/pytorch_lightning/accelerators/ddp2_backend.py index 1b55a983c894e..28af6558a0fef 100644 --- a/pytorch_lightning/accelerators/ddp2_backend.py +++ b/pytorch_lightning/accelerators/ddp2_backend.py @@ -47,9 +47,9 @@ def _resolve_task_idx(self): # torchelastic or general non_slurm ddp2 try: self.task_idx = int(os.environ['LOCAL_RANK']) - except Exception as e: + except Exception as exp: m = 'ddp2 only works in SLURM or via torchelastic with the WORLD_SIZE, LOCAL_RANK, GROUP_RANK flags' - raise MisconfigurationException(m) + raise MisconfigurationException(m) from exp def train(self): model = self.trainer.model diff --git a/pytorch_lightning/trainer/logging.py b/pytorch_lightning/trainer/logging.py index 26572feb5e35e..b585647fb5a0e 100644 --- a/pytorch_lightning/trainer/logging.py +++ b/pytorch_lightning/trainer/logging.py @@ -141,13 +141,13 @@ def process_dict_result(self, output, train=False): if train: try: loss = output['loss'] - except Exception: + except Exception as exp: if isinstance(output, torch.Tensor): loss = output else: raise RuntimeError( 'No `loss` value in the dictionary returned from `model.training_step()`.' - ) + ) from exp # when using dp need to reduce the loss if self.use_dp or self.use_ddp2: diff --git a/pytorch_lightning/utilities/parsing.py b/pytorch_lightning/utilities/parsing.py index dab1127579b87..c562f780e88ee 100644 --- a/pytorch_lightning/utilities/parsing.py +++ b/pytorch_lightning/utilities/parsing.py @@ -158,8 +158,8 @@ class AttributeDict(Dict): def __getattr__(self, key): try: return self[key] - except KeyError: - raise AttributeError(f'Missing attribute "{key}"') + except KeyError as exp: + raise AttributeError(f'Missing attribute "{key}"') from exp def __setattr__(self, key, val): self[key] = val diff --git a/tests/base/models.py b/tests/base/models.py index 9c319add4aca1..79f407d62aadf 100644 --- a/tests/base/models.py +++ b/tests/base/models.py @@ -10,9 +10,9 @@ try: from test_tube import HyperOptArgumentParser -except ImportError: +except ImportError as exp: # TODO: this should be discussed and moved out of this package - raise ImportError('Missing test-tube package.') + raise ImportError('Missing test-tube package.') from exp from pytorch_lightning.core.lightning import LightningModule