我正在使用记录在这里来实现一个有限状态机。概述的功能之一是能够忽略无效触发器。下面是文档中的示例:
# 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页面上的文档外,该图书馆的信息有限。如果有人对此有任何洞察力,我将感谢您的帮助。
提前谢谢。
发布于 2018-03-29 00:37:40
若要在文档中规定的规则下成为无效触发器,触发器名称必须在模型的某个位置有效。例如,尝试从状态“进行中的更改”触发“合并”。您会得到一个属性错误,因为“无效”根本不是一个触发器:您有一个包含四个的列表,而这不是其中之一。
要查看将“无效”设置为触发器的效果,请在漂亮的线性循环之后添加一个结束到开始的转换(下面的最后一行):
# 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])现在,您的代码应该按预期运行,忽略无效的转换。
https://stackoverflow.com/questions/49523655
复制相似问题