【问题标题】:Error - Takes 1 positional argument but 2 were given错误 - 接受 1 个位置参数,但给出了 2 个
【发布时间】:2021-06-17 12:30:56
【问题描述】:

我收到一条错误消息,提示“回溯(最近一次调用最后一次):文件“C:\Users\SUL-I\fatest2.py”,第 42 行,在 leftsensor = fa.ReadLine(0) 文件中“ C:\Users\SUL-I\FA.py",第 180 行,在 ReadLine self._flush(self) TypeError: _flush() 需要 1 个位置参数,但当我运行一些 Python 代码时给出了 2 个写的。

代码如下:

#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);

【问题讨论】:

  • self 隐式传递给方法,将self._flush(self) 替换为self._flush()
  • 好的,我听从了这个建议,现在又遇到了类似的错误:
  • 回溯(最近一次调用最后):文件“C:\Users\SUL-I\fafollowline4.py”,第 42 行,在 leftsensor = fa.ReadLine(0) 文件“C :\Users\SUL-I\FA.py",第 183 行,在 ReadLine r = self._readval("ReadLine", 1, 1) TypeError: _readval() 接受 3 个位置参数,但给出了 4 个
  • 请显示_readval 的定义,错误来自那里,但您的代码中没有。 (PS:对于未来,请在您的问题中直接添加额外的错误消息和信息,因为您会看到 cmets 丢失格式并且回溯变得不可读)
  • _readval 只期待"Readline" 和第一个1 参数;它不知道如何处理第二个 1 参数。

标签: python function arguments


【解决方案1】:

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

比较_readval的定义:

def _readval(self, cmd, loop_max):

您的电话:

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

"Readline" 分配给cmd,第一个1 分配给loop_max。没有为第二个 1 分配的参数留下任何参数,因此您会看到观察到的错误。

【讨论】:

    猜你喜欢
    • 2016-10-13
    • 2019-04-20
    • 2018-11-15
    • 2014-07-19
    • 2016-08-09
    • 2020-01-30
    • 2019-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多