2017-09-13 53 views
1

我寫了一個基本的程序,它應該打開一個COMPORT到設備的串行連接:Pyserial ValueError異常:「端口」必須是無或字符串,而不是<type 'int'>

import serial 
device = serial.Serial(port=5, baudrate=115200, bytesize=8, 
    timeout=1,parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE) 

一臺PC上此代碼的工作。 另一方面,它產生此錯誤消息:

Traceback (most recent call last): 
File "C:/Users/Lab/Desktop/Seebeck measurement software working version 
170718/testtofinddevice.py", line 15, in <module> 
device = serial.Serial(port=5, baudrate=115200, bytesize=8, 
timeout=1,parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE) 
File "C:\Python27\lib\site-packages\serial\serialwin32.py", line 31, in 
__init__ 
super(Serial, self).__init__(*args, **kwargs) 
File "C:\Python27\lib\site-packages\serial\serialutil.py", line 218, in 
__init__ 
self.port = port 
File "C:\Python27\lib\site-packages\serial\serialutil.py", line 264, in port 
raise ValueError('"port" must be None or a string, not 
{}'.format(type(port))) 
ValueError: "port" must be None or a string, not <type 'int'>`enter code here` 
+1

我相信設置爲「5」的'port'應該設置爲一個字符串,例如'「5」'。 –

+0

引號我得到:回溯(最後最近一次調用): 文件 「C:\ testtofinddevice.py」,2號線,在 設備= serial.Serial(端口= 「5」,波特率= 115200) .. .File「C:\ ... \ serialwin32.py」,第62行,打開 raise SerialException(「could not open port {!r}:{!r}」.format(self.portstr,ctypes.WinError ))) SerialException:無法打開端口'5':WindowsError(2,'系統找不到指定的文件') – user2206668

+0

確定您的設備名稱被稱爲「5」? from [pyserial's api](http://pyserial.readthedocs.io/en/latest/pyserial_api.html#serial.Serial):「port是一個設備名稱:取決於操作系統,例如GNU上的'/ dev/ttyUSB0'/Linux或Windows上的'COM3'「。 –

回答

0

所以我找到了自己的解決方案。但我不明白爲什麼它在兩臺電腦上以不同的方式工作: 您需要下面的代碼才能使其工作: import serial device = serial.Serial(port = 5,baudrate = 115200, bytesize = 8, 超時= 1,奇偶校驗= serial.PARITY_NONE,停止位= serial.STOPBITS_ONE)

在另一此代碼: 進口串行 設備= serial.Serial(端口= 「COM6」,波特率= 115200 ,bytesize = 8, timeout = 1,parity = serial.PARITY_NONE,stopbits = serial.STOPBITS_ONE)

所以似乎有2個不同版本的pyserial我猜?

+0

請參閱我的答案....它是兩個機器之間pyserial的版本不同......在每臺機器的命令行上執行「pip freeze」,您可能會在pyserial 2.x(port = 5),還有一個在pyserial 3.x(port =「com6」)。 – grambo

0

這是由於pyserial的版本,而不是Python的版本。他們將參數從int更改爲pyserial 2.7(可以安裝在Python 3.x)和pyserial 3.x之間的字符串。我現在在我的大部分程序中都有這樣的代碼:

if (float(serial.VERSION) >= 3.0): 
    portnamenum = sys.argv[1] 
    print ("Opening " + portnamenum) 
else: 
    portnamenum = int(sys.argv[1]) 
    print ("Opening com" + str(portnamenum)) 
ser = serial.Serial(port=portnamenum, baudrate=19200, bytesize=8, parity="E", stopbits=1, timeout=0.1) 
相關問題