【发布时间】:2016-09-06 08:29:37
【问题描述】:
我正在使用transitions FSM 库。想象一下使用以下代码有一个应用程序 FSM:
from transitions import Machine
import os
class Application(object):
states = ["idle", "data_loaded"]
def __init__(self):
self.data = None
machine = Machine(model=self, states=Application.states, initial="idle")
machine.add_transition("filename_dropped",
source="idle",
dest="data_loaded",
before="load_data",
conditions="is_valid_filename")
self.machine = machine
def drop_filename(self, filename):
try:
self.filename_dropped(filename)
except IOError as exc:
print "Oops: %s" % str(exc)
def load_data(self, filename):
with open(filename) as file:
self.data = file.read()
def is_valid_filename(self, filename):
return os.path.isfile(filename)
它可以在 load_data 中抛出一个IOError。我的问题是从before 回调中引发异常(隐式或显式)是否安全?如果IOError 未发生转换,则此示例的状态保持idle 并且不会调用任何after 回调。但是,我想知道机器实例的内部状态是否会损坏。
附加问题:有没有更好的方法向应用程序发出带有具体信息的错误信号?在这个例子中,我可以使用条件来加载文件,但这看起来很难看,我需要一些额外的属性来跟踪错误等。
感谢您的任何帮助或建议。
【问题讨论】:
-
关于您的附加问题:您不喜欢引发异常以通知您的应用程序错误吗?
-
我可以提出异常,我指的是文件加载示例,我不想打开该文件两次(一次在条件中,一次在“之前”插槽中) .我可能在这里以一种不寻常的方式使用条件功能。它可能意味着基于一些附加信息允许的一些事情。
标签: python fsm pytransitions