2016-11-20 85 views
1

好日子大家,ValueError异常:“端口”必须是无或字符串,而不是<class 'int'>

我想发给我的USB连接锁控制器的命令。代码运行正常,直到这条线:

Connected ports: 
['COM6'] 
Please enter the port number that has port connected. 
i.e. if COM3 is shown, enter 3 when ask to enter port number. 
If the above shows [] than no connected port is found and errors will follow 
Please enter the port number: 6 

和下面的错误上来:

ValueError: "port" must be None or a string, not <class 'int'> 

我收到以下错误:

Traceback (most recent call last): 
    File "[...]", line 44, in <module> 
    serial_connection() #executes the function defined above 

    File "[...]", line 29, in serial_connection 
    ser.port = COMPORT - 1 #counter for port name starts at 0 

    File "[...]", line 260, in port 
    raise ValueError('"port" must be None or a string, not {}'.format(type(port))) 

下面是代码:

#this library is required as it helps establish the serial connection 
#Using pyserial Library to establish connection 
import serial #not being used because it was already called in portRead 
from portRead import * 

#Global Variables 
ser = 0 

#this will print out the port that can be used; ports that are connected. i.e. if COM3 is shown, enter 3 when ask to enter port number 
#if shown [] then no usb is connected to a port and errors will follow 
if __name__ == '__main__': 
    print ("Connected ports: ") #print means printing information on screen 
    print(serial_ports()) #function derived from portRead 
    print("Please enter the port number that has port connected. \n " 
      "i.e. if COM3 is shown, enter 3 when ask to enter port number. \n If the above shows [] than no connected port is found and errors will follow") 

#defining the serial connection 
def serial_connection(): 
    while True: #the while loop is used to continuously ask you to issue a new command until you decide to quit the program 
     ser = serial.Serial() 
     ser.baudrate = 38400 #Suggested rate in Southco documentation, both locks and program MUST be at same rate 
     COMPORT = int(input("Please enter the port number: ")) #this refers to which port your usb is inserted into 
     ser.port = COMPORT - 1 #counter for port name starts at 0 

     print ('Port %d entered Stephan '%COMPORT) 
     #timeout in seconds 
     ser.timeout = 10 
     ser.open() 
     command = input("please type command - open1/close1, or open2/close2. \n" 
        "If already open and you try to open no action will be taken and vice-versa...: \n ") 
     #call the serial_connection() function 
     ser.write(("%s\r\n"%command).encode('ascii')) #Southco locks receives and sends commands in ASCII 


serial_connection() #executes the function defined above 

任何帮助将不胜感激,因为我是围绕解决这一问题

+0

我想你应该设置端口' “COM {}” 格式(COMPORT)',而不是数量。 –

+0

感谢您的评论。我将在哪里纳入? – John

+0

你可能会从int(input(“...”))' –

回答

2

工作,你必须在ser.port指定端口,而不仅仅是数量(因为我猜它可能是PRN,不仅COMx)。

修复建议:

COMPORT = int(input("Please enter the port number: ")) #this refers to which port your usb is inserted into 
ser.port = "COM{}".format(COMPORT) 

检查文档:https://pythonhosted.org/pyserial/shortintro.html#opening-serial-ports

+0

NVM关于我的prev评论。有用。 – John