ser.read() 有效,但 ser.readLine() 抛出错误

Posted

技术标签:

【中文标题】ser.read() 有效,但 ser.readLine() 抛出错误【英文标题】:ser.read() works, but ser.readLine() throws error 【发布时间】:2018-01-16 05:34:33 【问题描述】:

我正在尝试使用 Python 从 Arduino 读取串行值。

>>> ser.read()
'2'
>>> a = ser.readLine()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'Serial' object has no attribute 'readLine'

为什么 readLine 会出错,而 read() 不会?还是阅读(10)?

我正在使用的完整代码:

>>> import serial
>>> ser = serial.Serial('/dev/tty.usbmodem1411', 9600, timeout=10)
>>> ser.read()
'\n'
>>> ser.readLine()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'Serial' object has no attribute 'readLine'
>>> ser.read()
'2'
>>> ser.readLine()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'Serial' object has no attribute 'readLine'

【问题讨论】:

AttributeError: 'Serial' object has no attribute 'readLine' 暗示readLine 只是没有实现的东西 .readLine 不是很 Pythonic。有.readline 方法吗? pyserial.readthedocs.io/en/latest/shortintro.html 我正在关注这些示例。 @JeremyG 这些例子不使用readLine 【参考方案1】:

感谢@Goyo 指出我的愚蠢错误。

.readLine() 不是方法,但 .readline() 是。哎呀。

>>> ser = serial.Serial('/dev/tty.usbmodem1411', 9600)
>>> ser.readline()
'2456.05\r\n'

【讨论】:

如果消息中有换行符,此代码将不起作用。 GET A PROTOCOL

以上是关于ser.read() 有效,但 ser.readLine() 抛出错误的主要内容,如果未能解决你的问题,请参考以下文章

python如何删除字符串中指定位置字符?

Python 中的 read() 返回类型

树莓派python串口收发数据

python 学习——串口操作

python串行读取的CPU负载

Python从串口读取