Skip to content

Commit 18a96ba

Browse files
DeepMindcopybara-github
authored andcommitted
Preserve the stack trace when raising exceptions within exception handlers.
PiperOrigin-RevId: 481106930 Change-Id: Ib2645050ae2757759b4aac87887e965a6716c092
1 parent 5cb6b1d commit 18a96ba

File tree

1 file changed

+11
-8
lines changed

1 file changed

+11
-8
lines changed

dm_control/composer/entity.py

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,9 @@ def __init__(self, entity, observables):
5656
def __getattr__(self, name):
5757
try:
5858
model_identifier = self._entity.mjcf_model.full_identifier
59-
except AttributeError:
60-
raise ValueError('cannot retrieve the full identifier of mjcf_model')
59+
except AttributeError as exc:
60+
raise ValueError(
61+
'cannot retrieve the full identifier of mjcf_model') from exc
6162
return os.path.join(model_identifier, name)
6263

6364
def __dir__(self):
@@ -106,8 +107,9 @@ def as_dict(self, fully_qualified=True):
106107
# otherwise __getattr__ is executed and we get a very funky error.
107108
try:
108109
model_identifier = self._entity.mjcf_model.full_identifier
109-
except AttributeError:
110-
raise ValueError('cannot retrieve the full identifier of mjcf_model')
110+
except AttributeError as exc:
111+
raise ValueError(
112+
'Cannot retrieve the full identifier of mjcf_model.') from exc
111113

112114
return collections.OrderedDict(
113115
[(os.path.join(model_identifier, name), observable)
@@ -128,8 +130,9 @@ def get_observable(self, name, name_fully_qualified=False):
128130
if name_fully_qualified:
129131
try:
130132
model_identifier = self._entity.mjcf_model.full_identifier
131-
except AttributeError:
132-
raise ValueError('cannot retrieve the full identifier of mjcf_model')
133+
except AttributeError as exc:
134+
raise ValueError(
135+
'Cannot retrieve the full identifier of mjcf_model.') from exc
133136
return self._observables[name.replace(model_identifier, '')]
134137
else:
135138
return self._observables[name]
@@ -150,8 +153,8 @@ def set_options(self, options):
150153
for obs_key, obs_options in options.items():
151154
try:
152155
obs = self._observables[obs_key]
153-
except KeyError:
154-
raise KeyError('No observable with name {!r}'.format(obs_key))
156+
except KeyError as exc:
157+
raise KeyError('No observable with name {!r}'.format(obs_key)) from exc
155158
obs.configure(**obs_options)
156159

157160
def enable_all(self):

0 commit comments

Comments
 (0)