ignore_invalid_triggers 不工作
ignore_invalid_triggers not working
我正在使用 pytransitions 库 (documented here) 来实现有限状态机。概述的功能之一是能够忽略无效触发器。以下是文档中的示例:
# Globally suppress invalid trigger exceptions
m = Machine(lump, states, initial='solid', ignore_invalid_triggers=True)
如果触发器设置为 true,则不应为无效的触发器抛出错误。
这是我尝试构建的代码示例:
from transitions import Machine
states = ['changes ongoing', 'changes complete', 'changes pushed', 'code reviewed', 'merged']
triggers = ['git commit', 'git push', 'got plus2', 'merged']
# Initialize the state machine
git_user = Machine(states=states, initial=states[0], ignore_invalid_triggers=True, ordered_transitions=True)
# Create the FSM using the data provided
for i in range(len(triggers)):
git_user.add_transition(trigger=triggers[i], source=states[i], dest=states[i+1])
print(git_user.state)
git_user.trigger('git commit')
print(git_user.state)
git_user.trigger('invalid') # This line will throw an AttributeError
产生的错误:
changes ongoing
changes complete
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/transitions/core.py", line 58, in _get_trigger
raise AttributeError("Model has no trigger named '%s'" % trigger_name)
AttributeError: Model has no trigger named 'invalid'
Process finished with exit code 1
我不确定为什么在 ignore_invalid_triggers=True 时抛出错误。
除了官方 github 页面上的文档外,关于该库的信息有限。如果有人对此有任何见解,我将不胜感激。
提前致谢。
要成为文档中规定规则下的无效触发器,触发器名称必须在模型中的某处 有效。例如,尝试从状态 "changes ongoing" 触发 "merged"。您收到属性错误,因为 "invalid" 根本 不是 触发器:您有一个包含四个的列表,但那不是其中之一。
要查看将 "invalid" 设置为触发器的效果,请在漂亮的线性循环之后添加一个 end-to-start 转换(下面的最后一行):
# Create the FSM using the data provided
for i in range(len(triggers)):
git_user.add_transition(trigger=triggers[i], source=states[i], dest=states[i+1])
git_user.add_transition(trigger="invalid", source=states[-1], dest=states[0])
现在您的代码应该运行符合预期,忽略无效转换。
我正在使用 pytransitions 库 (documented here) 来实现有限状态机。概述的功能之一是能够忽略无效触发器。以下是文档中的示例:
# Globally suppress invalid trigger exceptions
m = Machine(lump, states, initial='solid', ignore_invalid_triggers=True)
如果触发器设置为 true,则不应为无效的触发器抛出错误。
这是我尝试构建的代码示例:
from transitions import Machine
states = ['changes ongoing', 'changes complete', 'changes pushed', 'code reviewed', 'merged']
triggers = ['git commit', 'git push', 'got plus2', 'merged']
# Initialize the state machine
git_user = Machine(states=states, initial=states[0], ignore_invalid_triggers=True, ordered_transitions=True)
# Create the FSM using the data provided
for i in range(len(triggers)):
git_user.add_transition(trigger=triggers[i], source=states[i], dest=states[i+1])
print(git_user.state)
git_user.trigger('git commit')
print(git_user.state)
git_user.trigger('invalid') # This line will throw an AttributeError
产生的错误:
changes ongoing
changes complete
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/transitions/core.py", line 58, in _get_trigger
raise AttributeError("Model has no trigger named '%s'" % trigger_name)
AttributeError: Model has no trigger named 'invalid'
Process finished with exit code 1
我不确定为什么在 ignore_invalid_triggers=True 时抛出错误。 除了官方 github 页面上的文档外,关于该库的信息有限。如果有人对此有任何见解,我将不胜感激。
提前致谢。
要成为文档中规定规则下的无效触发器,触发器名称必须在模型中的某处 有效。例如,尝试从状态 "changes ongoing" 触发 "merged"。您收到属性错误,因为 "invalid" 根本 不是 触发器:您有一个包含四个的列表,但那不是其中之一。
要查看将 "invalid" 设置为触发器的效果,请在漂亮的线性循环之后添加一个 end-to-start 转换(下面的最后一行):
# Create the FSM using the data provided
for i in range(len(triggers)):
git_user.add_transition(trigger=triggers[i], source=states[i], dest=states[i+1])
git_user.add_transition(trigger="invalid", source=states[-1], dest=states[0])
现在您的代码应该运行符合预期,忽略无效转换。