2017-09-13 327 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) 
相关问题