我正在尝试用我自己的模块包装PySerial模块,我无法让它构造PySerial对象。无论我尝试什么,构造函数都会调用我的类,而不是PySerial。
在文件serial.py
中import serial as pyserial
class Serial(Stream):
"""
Class to represent a serial stream.
"""
def __init__(self, **kwargs):
super(Serial, self).__init__()
if 'port' not in kwargs:
raise Exception('Missing port parameter in serial constructor')
self._conn = pyserial.Serial()
在主Python脚本中:
try:
conn = serial.Serial(port=PORT, baud=BAUD)
错误讯息:
C:\workspace> python test_serial_stream.py
F
======================================================================
FAIL: test_constructor (__main__.TestSerialStream)
----------------------------------------------------------------------
Traceback (most recent call last):
File "test_serial_stream.py", line 15, in test_constructor
self.fail("Constructor crashed: "+ ex.message)
AssertionError: Constructor crashed: Missing port parameter in serial constructor
----------------------------------------------------------------------
Ran 1 test in 0.001s
FAILED (failures=1)
C:\workspace>
从断言消息中,我们可以看到它在构造函数中崩溃了。如果我调试它,它会跳转if,但是它会在异常后调用行中的相同构造函数。这次没有args而且崩溃了。
答案 0 :(得分:1)
您正在使用名为serial.py
的本地文件,该文件与串行库的模块名称相同。当您的脚本运行import serial as pyserial
时,实际上pyserial
引用您的本地文件serial.py
而不是系统库。更简单的解决方案是将脚本从serial.py
重命名为myserial.py
。此外,请务必删除重命名操作后可能保留的任何serial.pyc
。