From c67cb7f3d40643c57341fca4560c57400629a6df Mon Sep 17 00:00:00 2001 From: FaQ Date: Wed, 30 Oct 2019 13:56:47 +0100 Subject: [PATCH] Don't mask away KeyError when executing a transition --- tests/test_core.py | 7 +++++++ transitions/core.py | 6 +++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/tests/test_core.py b/tests/test_core.py index 6a267140..d6b726cb 100644 --- a/tests/test_core.py +++ b/tests/test_core.py @@ -774,6 +774,13 @@ def trigger(self, value): m = Machine(model=model) self.assertEqual(model.trigger(5), 5) + def raise_key_error(): + raise KeyError + + self.stuff.machine.add_transition('do_raises_keyerror', '*', 'C', before=raise_key_error) + with self.assertRaises(KeyError): + self.stuff.trigger('do_raises_keyerror') + def test_get_triggers(self): states = ['A', 'B', 'C'] transitions = [['a2b', 'A', 'B'], diff --git a/transitions/core.py b/transitions/core.py index 0a44f764..bcd1f298 100644 --- a/transitions/core.py +++ b/transitions/core.py @@ -62,10 +62,10 @@ def _get_trigger(model, machine, trigger_name, *args, **kwargs): bool: True if a transitions has been conducted or the trigger event has been queued. """ try: - return machine.events[trigger_name].trigger(model, *args, **kwargs) + event = machine.events[trigger_name] except KeyError: - pass - raise AttributeError("Do not know event named '%s'." % trigger_name) + raise AttributeError("Do not know event named '%s'." % trigger_name) + return event.trigger(model, *args, **kwargs) def _prep_ordered_arg(desired_length, arguments=None):