2016-11-20 58 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

相關問題