默认参数定位和TypeError



所以这是我的代码:

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。不过,我无法用你发布的代码来证实这一点。

最新更新