Python 非类型对象没有属性';写';

Python 非类型对象没有属性';写';,python,pyserial,Python,Pyserial,我有一个Python程序,它打开串口COM4来发送一些命令。我修改它的方式是,当串口COM4打开时,我想打开串口COM5一段时间并发送一些命令。我有一个名为serialChannel的pyserial对象,它执行端口COM4的所有操作,并按预期工作。我创建了另一个Pyserial对象serialChannel5(在comms类下的comms.py文件中的serialChannel对象下方声明),如中所示: 我的程序就是这样做的: def myscr(control, log): myco

我有一个Python程序,它打开串口COM4来发送一些命令。我修改它的方式是,当串口COM4打开时,我想打开串口COM5一段时间并发送一些命令。我有一个名为serialChannel的pyserial对象,它执行端口COM4的所有操作,并按预期工作。我创建了另一个Pyserial对象serialChannel5(在comms类下的comms.py文件中的serialChannel对象下方声明),如中所示:

我的程序就是这样做的:

def myscr(control, log):
    mycomms = comms.comms()
    comms.serialOpen(logging=False)
    control.snd_rcv(defines.command1)
    comms.serialClose()
这就是失败的程序:

def myscr(control, log):
    mycomms = comms.comms()
    comms.serialOpen5(logging=False)
    control.snd_rcv5(defines.command1)
    comms.serialClose5()
如果我只使用我的原始函数,命令“command1”在端口4上发送时不会出现问题。但是如果我使用与端口5相关的函数(如上所述,函数名末尾以5作为后缀-如serialOpen5、snd_rcv5等),程序会抛出一个错误:

非类型对象没有属性写入

这些是我对串行COM4的相关功能。请注意,串行5的所有功能仅复制如下:

def serialOpen(self, port=None, logging=None):
    iport.device = COM4
    self.device = iport.device

    self.serialChannel = serial.Serial(
            port=self.device,
            baudrate=self.DEFAULT_BAUD,
            parity=self.DEFAULT_PARITY,
            stopbits=self.DEFAULT_STOPBITS,
            bytesize=self.DEFAULT_DATABITS,
            timeout=self.READ_TIMEOUT,
            write_timeout=self.WRITE_TIMEOUT
        )
        self.serialChannel.isOpen()
        self.serialChannel.flushInput()
        self.serialChannel.flushOutput()



def snd_rcv(self, cmd, logging=True,):
    try:
        res = self.comms.sndcmd(cmd)
        return res

def sndcmd(self, command)
    self.Tx(self.command)
    self.serialChannel.flushInput()

def Tx(self, cmd):
    self.serialChannel.write(cmd.encode())
    return True
上述整个序列适用于COM,并通过COM4发送命令。当我为COM5复制这些函数时,它会抛出一个错误:

“NoneType”对象没有属性“write”;(在sndcmd5中) sndcmd5是等同于sndcmd的COM5

引发错误的代码:

def serialOpen5(self, port=None, logging=None):
    iport.device = COM5
    self.device = iport.device

    self.serialChannel5 = serial.Serial(
            port=self.device,
            baudrate=self.DEFAULT_BAUD,
            parity=self.DEFAULT_PARITY,
            stopbits=self.DEFAULT_STOPBITS,
            bytesize=self.DEFAULT_DATABITS,
            timeout=self.READ_TIMEOUT,
            write_timeout=self.WRITE_TIMEOUT
        )
        self.serialChannel5.isOpen()
        self.serialChannel5.flushInput()
        self.serialChannel5.flushOutput()



def snd_rcv5(self, cmd, logging=True,):
    try:
        res = self.comms.sndcmd5(cmd)
        return res

def sndcmd5(self, command)
    self.Tx5(self.command)
    self.serialChannel5.flushInput()

def Tx5(self, cmd):
    self.serialChannel5.write(cmd.encode())
    return True
能帮我找出我做错了什么吗

具有函数myscr的脚本位于主脚本文件中def\uuuu init\uuuu与函数serialOpen/serialOpen5、sndcmd/sndcmd5、Tx/Tx5一起位于comms文件中。
snd_rcv/snd_rcv5在另一个名为controller的文件中,

愚蠢的我,我没有定义对象控件,但在主脚本中使用了它。现在通过在脚本中定义“control”(控制)修复了此问题。请始终发布完整的错误消息并进行完全回溯。为什么您只向我们显示工作代码,而不显示实际存在问题的代码?@Selcuk-很抱歉,我的Pycharm只是生成此错误。。。我没有得到更多的信息,因为我有一堆try-except语句。@jasonharper-COM5的代码完全相同(前缀为“5”)。我假设我在Pyserial对象创建/传递方面做错了什么?@Selcuk-它也给了我函数名-我现在已经把它添加到问题中了。谢谢
def serialOpen5(self, port=None, logging=None):
    iport.device = COM5
    self.device = iport.device

    self.serialChannel5 = serial.Serial(
            port=self.device,
            baudrate=self.DEFAULT_BAUD,
            parity=self.DEFAULT_PARITY,
            stopbits=self.DEFAULT_STOPBITS,
            bytesize=self.DEFAULT_DATABITS,
            timeout=self.READ_TIMEOUT,
            write_timeout=self.WRITE_TIMEOUT
        )
        self.serialChannel5.isOpen()
        self.serialChannel5.flushInput()
        self.serialChannel5.flushOutput()



def snd_rcv5(self, cmd, logging=True,):
    try:
        res = self.comms.sndcmd5(cmd)
        return res

def sndcmd5(self, command)
    self.Tx5(self.command)
    self.serialChannel5.flushInput()

def Tx5(self, cmd):
    self.serialChannel5.write(cmd.encode())
    return True