首页 > 解决方案 > 接受 1 个位置参数,但给出了 2 个(对于 python 包:transitions)

问题描述

我正在使用 python 库“转换”来构建状态机。以下代码片段是问题陈述。

from transitions import *

class Matter(object):
  def __init__(self):
    self.temp = 0
    self.pressure = 101.325

  def set_environment(self, event):
    self.temp = event.kwargs.get('temp', 0)
    self.pressure = event.kwargs.get('pressure', 101.325)

  def print_pressure(self): print("Current pressure is %.2f kPa." % self.pressure)
  def dummy(self): print('I am liquid')

lump = Matter()

states = [State(name='solid'),
      State(name='liquid', on_enter=['dummy'])]
transitions = [ {'trigger': 'melt', 'source': 'solid', 'dest': 'liquid', 'before':'set_environment'}]
machine = Machine(lump, states=states, transitions=transitions, send_event=True, initial='solid')


lump.melt(temp=45, pressure=1853.68)  # keyword args
lump.print_pressure()

如果不使用 dummy() 函数,代码运行没有任何问题。但是,使用 dummy() 函数会出现以下错误。

/home/developer/anaconda3/envs/SM_MC/bin/python /home/developer/PycharmProjects/SM_MC/error.py
Traceback (most recent call last):
File "/home/developer/PycharmProjects/SM_MC/error.py", line 24, in <module>
lump.melt(temp=45, pressure=1853.68)  # keyword args
File "/home/developer/anaconda3/envs/SM_MC/lib/python3.7/site-packages/transitions/core.py", line 383, in trigger
return self.machine._process(func)
File "/home/developer/anaconda3/envs/SM_MC/lib/python3.7/site-packages/transitions/core.py", line 1047, in _process
return trigger()
File "/home/developer/anaconda3/envs/SM_MC/lib/python3.7/site-packages/transitions/core.py", line 399, in _trigger
return self._process(event_data)
File "/home/developer/anaconda3/envs/SM_MC/lib/python3.7/site-packages/transitions/core.py", line 409, in _process
if trans.execute(event_data):
File "/home/developer/anaconda3/envs/SM_MC/lib/python3.7/site-packages/transitions/core.py", line 263, in execute
self._change_state(event_data)
File "/home/developer/anaconda3/envs/SM_MC/lib/python3.7/site-packages/transitions/core.py", line 274, in _change_state
event_data.machine.get_state(self.dest).enter(event_data)
File "/home/developer/anaconda3/envs/SM_MC/lib/python3.7/site-packages/transitions/core.py", line 120, in enter
event_data.machine.callback(handle, event_data)
File "/home/developer/anaconda3/envs/SM_MC/lib/python3.7/site-packages/transitions/core.py", line 1003, in callback
func(event_data)

TypeError: dummy() 接受 1 个位置参数,但给出了 2 个

链接中有关转换包的更多信息:https ://github.com/pytransitions/transitions#passing-data

可能是什么问题呢?提前致谢。

标签: python

解决方案


推荐阅读