所以这是我的代码:
FLASHCMD_TIMEOUT = 20
DEFAULT_TIMEOUT = 50
def createcommand(self):
my_cmd = def.FLASHCMD
timeout = def.FLASHCMD_TIMEOUT
print(f"sending timeout val = {timeout}")
response = self.op_sndrcv(my_cmd, timeout)
return response
def op_sndrcv(self, command, timeout = def.DEFAULT_TIMEOUT, log=True, resp_needed=False):
# Do process the command and return response
当我执行时,我得到TypeError: SubElement() argument 1 must be xml.etree.ElementTree.Element, not None
我需要的是将值20(FLASHCMD_TIMEOUT(传递给函数op_sndrcv((。create_command((op_sndrcv((是我的多个例程,我想在不改变当前格式的情况下,通过引入新的变量timeout
,将其保留为可选的
但当我像下面这样修改函数时,它不会抛出错误,但我最终使用了错误的值(50而不是20(
def op_sndrcv(self, command, log=True, resp_needed=False, timeout = def.DEFAULT_TIMEOUT):
# Do process the command and return response
response = self.com.sndCmd(command, timeout, resp_needed)
如有任何帮助,我们将不胜感激!
您的问题似乎是将参数的顺序更改为op_sndrcv
,而没有修改createcommand
中的调用以尊重更改。有两种可能性可以解决这个问题。修改op_sndrcv
,使参数顺序与以前相同:
def op_sndrcv(self, command, timeout = def.DEFAULT_TIMEOUT, log=True, resp_needed=False)
或者你可以在createcommand
:中命名你发送的参数
response = self.op_sndrcv(my_cmd, timeout=timeout)
然而,我怀疑这掩盖了您的实际错误,即您的第一次超时时间太短,并且在继续下一次操作之前没有给您的通信足够的时间返回,这导致了TypeError
。不过,我无法用你发布的代码来证实这一点。