You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用transitions库构建状态图遇TypeError错误的解决请求

问题:使用transitions库构建状态图时抛出TypeError错误

尝试使用transitions库构建简单状态图,代码如下:

from transitions.extensions.diagrams import HierarchicalGraphMachine
from IPython.display import display, Markdown

states = ['engoff' , 'poweron' , 'engon' , 'FCCActions' #'emgstatus' , "whevent" , 'new data receive'
              ,{'name' : 'cores',
                'final': True,
                'parallel' : [{ 'name' : 'mapeng', 'children': ['maploaded', {"name": "update", "final": True}],
                                'initial' : 'maploaded',
                                'transitions': [['delay', 'maploaded', "update"]]},
                    {
                     'name' : 'EAA' , 'children': ['newdata', {"name": "done!", "final": True}], #environment analayser
                     'initial' : 'newdata', 
                     'transitions': [['Analaysing', 'newdata', 'done!']]
                  },{
                     'name' : 'FAI' , 'children': ['newdata', {"name": "done!", "final": True}],
                     'initial' : 'newdata',
                     'transitions': ['CalculateandLearning', 'newdata', 'done!']
                  }]
              }
            ]


transitions = [['flightcommand', 'engon', 'FCCActions'],
                   ['poweroff-command', 'engon', 'engoff'],
                   ['init', 'engoff', 'poweron'],
                   ['engstart-command', 'poweron', 'engon'],
                   ['startservice', 'poweron', 'cores']]

m = HierarchicalGraphMachine(states=states, transitions=transitions, initial="engoff", show_conditions=True,
                             title="Mermaid", auto_transitions=False)
m.init()

运行后抛出错误:

Traceback (most recent call last):
  File ".../3.transitions/test.py", line 29, in <module>
    m = HierarchicalGraphMachine(states=states, transitions=transitions, initial="engoff", show_conditions=True,
  File "...\Python\Python38\lib\site-packages\transitions\extensions\diagrams.py", line 137, in __init__
    super(GraphMachine, self).__init__(
  File "...\Python\Python38\lib\site-packages\transitions\extensions\markup.py", line 61, in __init__
    super(MarkupMachine, self).__init__(
  File "...\Python\Python38\lib\site-packages\transitions\extensions\nesting.py", line 407, in __init__
    super(HierarchicalMachine, self).__init__(
  File "...\Python\Python38\lib\site-packages\transitions\core.py", line 601, in __init__
    self.add_states(states)
  File "...\Python\Python38\lib\site-packages\transitions\extensions\diagrams.py", line 230, in add_states
    super(GraphMachine, self).add_states(
  File "...\Python\Python38\lib\site-packages\transitions\extensions\markup.py", line 126, in add_states
    super(MarkupMachine, self).add_states(states, on_enter=on_enter, on_exit=on_exit,
  File "...\Python\Python38\lib\site-packages\transitions\extensions\nesting.py", line 521, in add_states
    self._add_dict_state(state, ignore, remap, **kwargs)
  File "...\Python\Python38\lib\site-packages\transitions\extensions\nesting.py", line 978, in _add_dict_state
    self.add_states(state_children, remap=remap, **kwargs)
  File "...\Python\Python38\lib\site-packages\transitions\extensions\diagrams.py", line 230, in add_states
    super(GraphMachine, self).add_states(
  File "...\Python\Python38\lib\site-packages\transitions\extensions\markup.py", line 126, in add_states
    super(MarkupMachine, self).add_states(states, on_enter=on_enter, on_exit=on_exit,
  File "...\Python\Python38\lib\site-packages\transitions\extensions\nesting.py", line 521, in add_states
    self._add_dict_state(state, ignore, remap, **kwargs)
  File "...\Python\Python38\lib\site-packages\transitions\extensions\nesting.py", line 980, in _add_dict_state
    self.add_transitions(transitions)
  File "...\Python\Python38\lib\site-packages\transitions\core.py", line 1032, in add_transitions
    self.add_transition(**trans)
TypeError: add_transition() argument after ** must be a mapping, not str
解决方案

错误根源是FAI子状态的transitions格式错误:当前写法是['CalculateandLearning', 'newdata', 'done!'],这是一个包含三个字符串的列表,但transitions库要求每个转换规则必须是嵌套列表(外层列表包含每个转换的子列表),和mapeng、EAA的写法保持一致。

修正后的states部分代码:

states = ['engoff' , 'poweron' , 'engon' , 'FCCActions' #'emgstatus' , "whevent" , 'new data receive'
              ,{'name' : 'cores',
                'final': True,
                'parallel' : [{ 'name' : 'mapeng', 'children': ['maploaded', {"name": "update", "final": True}],
                                'initial' : 'maploaded',
                                'transitions': [['delay', 'maploaded', "update"]]},
                    {
                     'name' : 'EAA' , 'children': ['newdata', {"name": "done!", "final": True}], #environment analayser
                     'initial' : 'newdata', 
                     'transitions': [['Analaysing', 'newdata', 'done!']]
                  },{
                     'name' : 'FAI' , 'children': ['newdata', {"name": "done!", "final": True}],
                     'initial' : 'newdata',
                     # 这里修正为嵌套列表,和其他子状态的transitions格式统一
                     'transitions': [['CalculateandLearning', 'newdata', 'done!']]
                  }]
              }
            ]

修改后,FAI的转换规则被正确包裹在子列表中,库可以正确解析每个转换的触发事件、源状态和目标状态,不会再抛出类型错误。

内容的提问来源于stack exchange,提问作者irmoah80

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 16:04:55