错误 - 采用 1 个位置参数但给出了 2 个

Error - Takes 1 positional argument but 2 were given

当我 运行 我写了一些 Python 代码时,我收到一条错误消息说 'Traceback (most recent call last): File "C:\Users\SUL-I\fatest2.py", line 42, in leftsensor = fa.ReadLine(0) File "C:\Users\SUL-I\FA.py", line 180, in ReadLine self._flush(self) TypeError: _flush() takes 1 positional argument but 2 were given'。

代码如下:

#brings in external references
import FA 
import time

#defines some constants
black = 0
white = 200
correction = 10
w = 0

#controls the first robot, remember to update the com port number
fa = FA.Create()
comport = 7
fa.ComOpen(comport)
time.sleep(5) 
fa.PlayNote(294,800)
fa.PlayNote(330,800)
fa.PlayNote(262,800)
fa.LEDWrite(24)
time.sleep(0.25)
fa.LEDWrite(60)
time.sleep(0.25)
fa.LEDWrite(36)
time.sleep(0.25)
fa.LEDWrite(102)
time.sleep(0.25)
fa.LEDWrite(66)
time.sleep(0.25)
fa.LEDWrite(195)
time.sleep(0.25)
fa.LEDWrite(129)
time.sleep(0.25)
fa.LEDWrite(195)
time.sleep(0.25)
fa.LEDWrite(66)
time.sleep(0.25)
fa.LEDWrite(102)
time.sleep(0.25)
fa.LEDWrite(36)
time.sleep(0.25)
fa.LEDWrite(60)
leftsensor = fa.ReadLine(0)
rightsensor = fa.ReadLine(1)

while w < 100:
    if leftsensor >= white:
                fa.SetMotors(20,10)
    elif rightsensor >= white:
                fa.SetMotors(10,20)
    else:
                fa.Forwards(10)
    w = w+1

ComClose(comport)

这里是FA模块中的ReadLine:

    def ReadLine(self, index):
        """Read the line sensor value

        Args:
            index: Line sensor to query (0 to 1)

        Returns:
            int: Value of Line sensor (0 to 4095)
        """
        self._flush(self)
        s = 'ReadLine {0}\n'.format(int(index))
        self.__ser.write(s.encode())
        r = self._readval("ReadLine", 1, 1)
        return(r);

readval 的定义:

def _readval(self, cmd, loop_max):
        r = -1
        loop = 0
        while (loop < loop_max):
            try:
                r = int(self.__ser.readline().rstrip())
                if (self.__verbose != 0):
                    msg = '{0}: {1}'.format(cmd, r)
                    print(msg)
                loop = loop_max + 1   #break out of loop
            except ValueError:
                if (self.__verbose != 0):
                    msg = '{0}: No return({1})'.format(cmd,loop)
                    print(msg)
            loop = loop + 1
        return(r);

解决了涉及 _flush_ 的错误后,您的第二个错误出于类似原因而发生。

比较_readval的定义:

def _readval(self, cmd, loop_max):

您的来电:

r = self._readval("ReadLine", 1, 1)

"Readline"赋给了cmd,第一个1赋给了loop_max。没有参数可以分配给第二个 1,因此您会看到观察到的错误。