2016-02-29 64 views
0

我想用我自己的模塊來包裝PySerial模塊,我無法得到它來構造PySerial對象。無論我嘗試什麼,構造函數都會調用我的類而不是PySerial類。Python文件和類匹配導入的文件和類

在文件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> 

從斷言消息,我們可以看到,它的轟然構造函數。如果我調試它,它會跳轉,如果很好,但它會在異常後調用行中相同的構造函數。這一次沒有參數,它崩潰了。

回答

1

您正在使用名爲serial.py的本地文件,其名稱與串行庫的模塊名稱相同。當您的腳本運行import serial as pyserial時,實際上,pyserial引用您的本地文件serial.py而不是系統庫。更簡單的解決方案是將您的腳本從serial.py重命名爲myserial.py。另外,請務必刪除重命名操作後可能保留的任何serial.pyc

+0

這似乎有一種解決方法,但我沒有時間找到它:( –