【发布时间】: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参数。